避免在DependencyProperty中使用“null”画笔

时间:2014-10-20 09:58:58

标签: c# wpf visual-studio designer coercion

我的自定义控件的DependencyProperty类型为Brush(背景颜色属性)。

用户可以使用标准的Visual Studio Color Property Bag设置颜色。 我想要的是排除设置空刷(带有禁止框的那个)的可能性。 我尝试以这种方式使用CoerceValue回调:

MyBackgroundColorProperty = DependencyProperty.Register("MyBackgroundColor", typeof(Brush), typeof(MyObject), new FrameworkPropertyMetadata(Brushes.Black, null, CoerceCurrentColor));

其中CoerceCurrentColor是:

private static object CoerceCurrentColor(DependencyObject d, object baseValue)
{
    if (baseValue == null)//Null brush can't be permitted
        return new SolidColorBrush(Colors.Transparent);

    return baseValue as Brush;
}

这有效......仅限第一次。

如果我选择" No Brush",则将真实颜色设置为透明。但是现在每当我尝试改变颜色时,我都会得到一个"无效的属性值"消息框错误。为什么?而且,有没有其他方法可以实现这一结果?

1 个答案:

答案 0 :(得分:1)

使用IValueConverter处理null可能性。