C# WPF Boyutu Değiştirilen Buton'un Boyutunu Kaydetmek

Hello

Hectopat
Katılım
2 Temmuz 2014
Mesajlar
555
Makaleler
2
Daha fazla  
Cinsiyet
Erkek
Merhaba, buton ile bir diğer butonun boyutunu değiştiriyoruma ama sorun kaydetme kısmında tekrardan debug yapınca eski hallerinde oluyorlar. En son değiştirdiğim boyutta nasıl kalırlar ? @Fatih Apaydın.
 
Son düzenleyen: Moderatör:
Adları aynı zaten. Yazdığım kod sadece değiştirmeye yarıyor kaydetmeye yaramıyor. Banada kaydedicek kod lazım.

Güncel. @Fatih Apaydın yarımlarınızı bekliyorum.
 
XAML Tasarım Kodu
Kod:
<Window x:Class="WpfApplication4.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded" Closing="Window_Closing">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>         
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
     
            <Button x:Name="btnDegistirici" Grid.Row="0" Grid.Column="0" Content="Değiştirici" Click="btnDegistirici_Click" Margin="5"/>
            <Button x:Name="btnHedef" Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="3" Content="Ayarları Değişen" Margin="5"/>
         
            <Button x:Name="btnEskiAyarlaraGetir" Grid.Row="1" Grid.Column="0" Content="Eski Ayarlara Getir" Click="btnEskiAyarlaraGetir_Click" />
     
    </Grid>
</Window>

C# Kodu
Kod:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Xml.Serialization;
namespace WpfApplication4
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            try//ayarlar xmlini bulamazsa kod patlamasın diye try bloğu kullanmalıyız.
            {
                using (StreamReader okuyucu = new StreamReader(AppDomain.CurrentDomain.BaseDirectory + "\\ayarlar.xml"))
                {
                    //xml dosyasından kaydedilen ayarları oku ve butona yansıt
                    XmlSerializer deSerilestirici = new XmlSerializer(typeof(List<ButonAyarlari>));
                    List<ButonAyarlari> ayarlar = (List<ButonAyarlari>)deSerilestirici.Deserialize(okuyucu);
                 
                    /*
                     Aşağıdaki kod satırları çirkin kodlar bu kodları
                     WPF'in bize sunduğu binding mekanizması ile daha temiz yapabiliriz.
                     */
                    //Listenin ilk kayıdında bizim buton ayarları var

                    ButonAyarlari hedefButonAyarlari = ayarlar[0];
                    btnHedef.Width = hedefButonAyarlari.Genislik;
                    btnHedef.Height = hedefButonAyarlari.Yukseklik;
                    btnHedef.Content = hedefButonAyarlari.ButonContent;
                }
            }
            catch
            {
            }
        }
        private void btnDegistirici_Click(object sender, RoutedEventArgs e)
        {
            btnHedef.Width = 250;
            btnHedef.Height = 100;
            btnHedef.Content = "Selamlar";
         
        }    
        private void btnEskiAyarlaraGetir_Click(object sender, RoutedEventArgs e)
        {
            btnHedef.Width = 350;
            btnHedef.Height = 25;
            btnHedef.Content = "Ayarları Değiştirilen";
        }
        private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            ButonAyarlari yeniayar = new ButonAyarlari
            {
                Genislik = btnHedef.Width,
                Yukseklik = btnHedef.Height,
                ButonContent = btnHedef.Content.ToString()
            };
            //Daha fazla ayarda kaydedebilirsiniz. Tek yapmanız gereken başka bir ayara ait
            //ButonAyarları nesnesini aşağıdaki listeye Add metodu ile eklemek

            List<ButonAyarlari> tumAyarlar = new List<ButonAyarlari>();
            tumAyarlar.Add(yeniayar);

            //Ayarları xmle yaz.
            using (StreamWriter yazici = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "\\ayarlar.xml"))
            {
                XmlSerializer serilestirici = new XmlSerializer(typeof(List<ButonAyarlari>));
                serilestirici.Serialize(yazici, tumAyarlar);
            }
        }
     
    }
    //Başka kaydetmek istediğiniz özellik varsa bu sınıfa o özelliği ekleyebilirsiniz.
    public class ButonAyarlari
    {
        public double Genislik
        {
            get;
            set;
        }
        public double Yukseklik
        {
            get;
            set;
        }
        public string ButonContent
        {
            get;
            set;
        }
    }
}
 
Son düzenleme:
Binding kullanılan versiyon. Bunu daha çok sevdim nedense :)
XAML Tasarım Kodu
Kod:
<Window x:Class="ButtonBindingKaydetme.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded" Closing="Window_Closing">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>

        <Button x:Name="btnDegistirici" Grid.Row="0" Grid.Column="0" Content="Değiştirici" Click="btnDegistirici_Click" Margin="5"/>
       
       
        <Button x:Name="btnHedef" Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="3" Margin="5" Width="{Binding Genislik}" Height="{Binding Yukseklik}" Content="{Binding ButonContent}"/>

       
       
        <Button x:Name="btnEskiAyarlaraGetir" Grid.Row="1" Grid.Column="0" Content="Eski Ayarlara Getir" Click="btnEskiAyarlaraGetir_Click" />

    </Grid>
</Window>

C# Kodu
Kod:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Xml.Serialization;

namespace ButtonBindingKaydetme
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            try//ayarlar xmlini bulamazsa kod patlamasın diye try bloğu kullanmalıyız.
            {
                using (StreamReader okuyucu = new StreamReader(AppDomain.CurrentDomain.BaseDirectory + "\\ayarlar.xml"))
                {
                    //xml dosyasından kaydedilen ayarları oku ve butona yansıt
                    XmlSerializer deSerilestirici = new XmlSerializer(typeof(List<ButonAyarlari>));
                    List<ButonAyarlari> ayarlar = (List<ButonAyarlari>)deSerilestirici.Deserialize(okuyucu);

                  
                    //Listenin ilk kayıdında bizim buton ayarları var                   
                    btnHedef.DataContext = ayarlar[0];                 
                }
            }
            catch//dosya yoksa ilk ayarlar ile buton başlasın
            {
                btnHedef.DataContext = new ButonAyarlari
                {
                    Genislik = 350,
                    Yukseklik = 25,
                    ButonContent = "Ayarları Değiştirilen"
                };
            }
        }



        private void btnDegistirici_Click(object sender, RoutedEventArgs e)
        {
            btnHedef.DataContext = new ButonAyarlari
            {
                Genislik = 250,
                Yukseklik = 100,
                ButonContent = "Selamlar"
            };

        }


        private void btnEskiAyarlaraGetir_Click(object sender, RoutedEventArgs e)
        {
            btnHedef.DataContext = new ButonAyarlari
            {
                Genislik = 350,
                Yukseklik = 25,
                ButonContent = "Ayarları Değiştirilen"
            };
        }


        private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {           
            List<ButonAyarlari> tumAyarlar = new List<ButonAyarlari>();         
            var kaydedilecekButonAyarlari = (ButonAyarlari)btnHedef.DataContext;
            tumAyarlar.Add(kaydedilecekButonAyarlari);
                                 
            //Ayarları xmle yaz.
            using (StreamWriter yazici = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "\\ayarlar.xml"))
            {
                XmlSerializer serilestirici = new XmlSerializer(typeof(List<ButonAyarlari>));
                serilestirici.Serialize(yazici, tumAyarlar);
            }
        }
    }


   // Başka kaydetmek istediğiniz özellik varsa bu sınıfa o özelliği ekleyebilirsiniz.
    public class ButonAyarlari
    {
        public double Genislik
        {
            get;
            set;
        }
        public double Yukseklik
        {
            get;
            set;
        }
        public string ButonContent
        {
            get;
            set;
        }
    }
   
}
 
Uyarı! Bu konu 11 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Technopat Haberler

Yeni konular

Geri
Yukarı