2013-04-21 4 views
1

Когда я пытаюсь привязать переднюю часть метки к свойству кисти (CurrentBrush), который реализует INotify, передний план не обновляется при изменении значения CurrentBrush. Я сделал другие привязки здесь, чтобы проверить, и они, похоже, работают нормально, это просто свойство Brush.Свойство привязки к кисти с INotify

Первоначально на переднем плане этикетки находится пурпурный, который предполагает, что связывание работает как минимум. Любые идеи относительно того, почему он не будет обновляться при последующих изменениях (например, при нажатии кнопки)?

(Я на самом деле столкнулся с этой проблемой в более крупном проекте, где я привязывал SelectedColor элемента управления цветом к свойству Stroke (который является кистью) элемента. Это не сработало, поэтому я попытался изолировать то, что может быть причиной проблемы, и это, где я в конечном итоге - любая помощь будет оценена)

в 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

Спасибо, что работает perfec ждение! Я попытался создать новый SolidColorBrush (вместо замороженных кистей) как изначально, так и внутри события, но теперь я вижу, что вы создаете объект один раз и просто изменяете его свойства вместо замены его (что было ошибкой, которую я делал). Еще раз спасибо! –

Смежные вопросы