2013-04-21 76 views
1

當我嘗試將標籤的前景綁定到實現INotify的畫筆屬性(CurrentBrush)時,當CurrentBrush的值更改時,前景不會更新。我在這裏做了其他綁定測試,他們似乎工作得很好,它只是Brush屬性。使用INotify綁定到畫筆屬性

最初,標籤的前景是洋紅色,表明綁定至少一次起作用。關於爲什麼它不會更新後續更改(例如,單擊按鈕時)的任何想法?我實際上在一個更大的項目中遇到了這個問題,我將Color Picker控件的SelectedColor綁定到一個元素的Stroke屬性(它是一個Brush),它不起作用,所以我試圖隔離什麼可能會造成這個問題,這是我結束了 - 任何幫助,將不勝感激)

的XAML:

<Label Content="Testing Testing 123" Name="label1" VerticalAlignment="Top" /> 
<Button Content="Button" Name="button1" Click="button1_Click" /> 

而這裏的後面的代碼:

public partial class MainWindow : Window, INotifyPropertyChanged 
{ 
    private Brush _currentBrush; 
    public Brush CurrentBrush 
    { 
     get { return _currentBrush; } 
     set 
     { 
      _currentBrush = value; 
      OnPropertyChanged("CurrentBrush"); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    protected void OnPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 

    } 

    public MainWindow() 
    { 
     InitializeComponent(); 
     CurrentBrush = Brushes.Magenta; 
     Binding binding = new Binding(); 
     binding.Source = CurrentBrush; 
     label1.SetBinding(Label.ForegroundProperty, binding); 
    } 

    private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     CurrentBrush = Brushes.Black; 
    } 

} 

回答

0

定義綁定源意味着用戶界面將聽取該源中的更改,這就是爲什麼當您將CurrentBrush更改爲其他顏色時,它不會影響UI,以避免您可以設置畫筆的顏色,這樣源仍然會保留同一個對象,你只需要修改的屬性:

設置畫筆 - 你不能使用Brushes.Magenta因爲他的屬性是隻讀(它冷凍刷)

CurrentBrush = new SolidColorBrush(Colors.Magenta); 

變色:

private void buttonBrush_Click(object sender, RoutedEventArgs e) 
    { 
     (CurrentBrush as SolidColorBrush).Color = Colors.Black; 
    } 
+0

謝謝,這工作完美TLY!我曾嘗試在事件的最初和內部創建一個新的SolidColorBrush(而不是凍結畫筆) - 但現在我看到您創建一次對象,只是修改其屬性而不是替換它(這是我製作的錯誤)。再次感謝! – 2013-04-21 16:43:10