2017-03-12 15 views
0

XAMLのWPF TextBoxのFontSizeをクラスメンバー変数にバインドするにはどうすればよいですか?XAMLのWPF TextBoxのFontSizeをクラスメンバー変数にバインドするにはどうすればよいですか?

私は、アプリケーションを通じて使用するフォントのコレクションを持っています。 これらのフォントの値を自分のコードの中で動的に変更し、実行時に変更を反映させたいと思います。

どうすればよいですか?ここで

public ClassFoo SampleClass; 

は私の何を私のXAMLのルックスである:ここで

は、これは私がMainWindow.xaml.csで私のクラスを定義する方法である私のクラス定義が

public ClassFoo 
{ 
    public double FontSize {get; set;} 
} 

次のようになりますlike:

<TextBlock Name="txtSample" Text="SomeText" 
    FontSize="{Binding SampleClass.FontSize}"/> 

はその後、実行時に、私はクラスをインスタンス化し、それを初期化します。

SampleClass = new ClassFoo() 
{ 
    FontSize = 16; 
} 

答えて

1

私はそのようにそれを作成します。

public class MainWindow : Page 
    { 
     public Foo Foo { get; set; } 

     public MainWindow() 
     { 
      DataContext = this; 
     } 
    } 


    public class Foo : INotifyPropertyChanged 
    { 
     private double _fontSize; 

     public double FontSize 
     { 
      get { return _fontSize; } 
      set 
      { 
       _fontSize = value; 
       OnPropertyChanged(nameof(FontSize)); 
      } 
     } 

     public event PropertyChangedEventHandler PropertyChanged; 

     [NotifyPropertyChangedInvocator] 
     protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) 
     { 
      PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

をして、好きなそれを呼び出す:

<TextBlock Name="txtSample" Text="SomeText" 
    FontSize="{Binding Foo.FontSize}"/> 
0

ほとんどおそらくDataContext = thisが必要です。 Mainwindow.xaml.csのコンストラクタにあります。 SampleClassを返すMainwindow.xaml.csも必要です。

0

あなただけなので、まず最初に行うには、SampleClass財産を作ることであろうパブリックプロパティにをバインドすることができます。

public ClassFoo SampleClass { get; set; } 

そして、あなたは、ウィンドウのコンストラクタの後に、実行時に動的に設定する場合ウィンドウがINotifyPropertyChangedインターフェイスを実装し、自動的に更新されるようにtagetプロパティの変更通知を発行する必要があります。

最後に、バインディングのソースを何らかの形でウィンドウに設定する必要があります。バインディングのSourceプロパティを明示的に設定するか、またはTextBlockDataContextまたはその親要素のいずれかをウィンドウのインスタンスに設定できます。

public partial class MainWindow : Window, INotifyPropertyChanged 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     DataContext = this; 
     this.Loaded += MainWindow_Loaded; 
    } 

    private void MainWindow_Loaded(object sender, RoutedEventArgs e) 
    { 
     SampleClass = new ClassFoo() 
     { 
      FontSize = 16 
     }; 
    } 

    private ClassFoo _sampleClass; 
    public ClassFoo SampleClass 
    { 
     get { return _sampleClass; } 
     set { _sampleClass = value; NotifyPropertyChanged(); } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "") 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 

あなたが投稿XAMLマークアップと一緒にMainWindowクラスのこの実装を試してみてください

関連する問題