【问题标题】:WPF – Change Property Value in Setter of Another PropertyWPF – 在另一个属性的设置器中更改属性值
【发布时间】:2017-12-07 16:52:31
【问题描述】:

在我的 自定义控件 的以下示例中,为什么我无法更改 setter 中的 TransparentColor 属性SelectedColor 属性?带有回调方法的解决方案可以正常工作,在更改另一个属性的情况下它们之间有什么区别?


public class MyColorPicker : Control
{
    static MyColorPicker()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(MyColorPicker), new FrameworkPropertyMetadata(typeof(MyColorPicker)));
    }

    public static readonly DependencyProperty SelectedColorProperty =
            DependencyProperty.Register("SelectedColor", typeof(Color), typeof(MyColorPicker), new PropertyMetadata(Color.FromRgb(0, 201, 201), OnSelectedColorChange));

    private static void OnSelectedColorChange(DependencyObject sender, DependencyPropertyChangedEventArgs e)
    {
        var colorPicker = (MyColorPicker)sender;
        var selectedColor = colorPicker.SelectedColor;
        colorPicker.TransparentColor = Color.FromArgb(0, selectedColor.R, selectedColor.G, selectedColor.B);
    }

    public Color SelectedColor
    {
        get { return (Color)GetValue(SelectedColorProperty); }
        set
        {
            // Why this not working? BorderStopColor = Color.FromArgb(0, value.R, value.G, value.B);
            SetValue(SelectedColorProperty, value);
        }
    }

    private static readonly DependencyPropertyKey TransparentColorPropertyKey =
            DependencyProperty.RegisterReadOnly("TransparentColor", typeof(Color), typeof(MyColorPicker), new PropertyMetadata(Color.FromArgb(0, 0, 201, 201)));

    public static readonly DependencyProperty TransparentColorProperty = TransparentColorPropertyKey.DependencyProperty;

    public Color TransparentColor
    {
        get { return (Color)GetValue(TransparentColorProperty); }
        protected set { SetValue(TransparentColorPropertyKey, value); }
    }
}

【问题讨论】:

    标签: c# wpf wpf-controls dependency-properties


    【解决方案1】:

    依赖属性的 CLR 包装器的设置器应该调用SetValue 方法来设置依赖属性的实际值。

    任何其他逻辑都应该在回调中实现。

    另请注意,在 XAML 中设置依赖项属性时,CLR 属性包装器会在运行时被绕过(但回调不是):

    Why are .NET property wrappers bypassed at runtime when setting dependency properties in XAML?

    【讨论】:

      猜你喜欢
      • 2017-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多