1

当我尝试将标签的前景绑定到实现 INotify 的画笔属性 (CurrentBrush) 时,当 CurrentBrush 的值更改时,前景不会更新。我在这里完成了其他绑定进行测试,它们似乎工作正常,这只是 Brush 属性。

最初,标签的前景是洋红色,这表明绑定至少可以工作一次。关于为什么它不会在后续更改中更新(例如,单击按钮时)的任何想法?

(我实际上在一个更大的项目中遇到了这个问题,我将颜色选择器控件的 SelectedColor 绑定到元素的 Stroke 属性(这是一个画笔)。它不起作用,所以我试图隔离可能是什么导致问题,这就是我最终的结果 - 任何帮助将不胜感激!)

xml:

<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;
    }

}
4

1 回答 1

0

定义绑定源意味着UI会监听该源中的变化,这就是为什么当您将CurrentBrush更改为其他颜色时不会影响UI以避免您可以设置画笔的颜色,这样源保持不变对象,您只需修改属性:

设置画笔 - 你不能使用 Brushes.Magenta 因为他的属性是只读的(它是一个冻结的画笔)

   CurrentBrush = new SolidColorBrush(Colors.Magenta);

换颜色:

  private void buttonBrush_Click(object sender, RoutedEventArgs e)
   {
       (CurrentBrush as SolidColorBrush).Color = Colors.Black;
   }
于 2013-04-21T16:35:20.630 回答