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:
Allah Allah, adlarını aynı mı yaptın? Text adlarını demiyorum, esas adlarını.
 
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:
@Fatih Apaydın hocam kodlar çirkin ama işe yarıyor . Teşekkür ederim yardımcı olduğunuz için.
 
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;
        }
    }
   
}
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…