如何设置从DependencyObject派生的类型的DependencyProperty的默认值

3
我正在创建一个自定义的WPF控件,该控件不是一个UserControl。这个自定义控件有两个属性(UnselectedAppearance 和 SelectedAppearance)。这些属性都是相同类型的(Appearance),它继承自 DependencyObject。Appearance类本身有几个依赖属性。我想知道设置每个Appearance属性的默认值的正确方法。我尝试了以下代码,但当我在设计器中尝试使用我的自定义控件时,会抛出异常。
public static readonly DependencyProperty UnselectedAppearanceProperty = DependencyProperty.Register("UnselectedAppearance", typeof(Appearance), typeof(FNDie), new PropertyMetadata(new Appearance()));

有没有办法我可以做到这一点?
3个回答

5
一个依赖属性的默认值是在该依赖对象的所有实例之间共享的,因此除了 null 以外的值通常只对值类型或不可变类有意义。换句话说,你可能会发现,null 是你最好的选择。
如果你非常需要为一个依赖属性设置可变引用值,可以将默认值设置为 null 并在构造函数中设置它。然而,你应该知道这样做会使该属性无法使用样式进行设置,这可能会限制其功能,具体取决于你的需求。

是的,是的,还是是的。我处于严重限制阶段,需要在没有SetCurrentValue()的Silverlight 5中设置DependencyProperty默认值为引用类型,而这在WPF中是可以实现的。 - Dr. Andrew Burnett-Thompson

2
您需要这样使用属性元数据:

使用属性元数据如下所示

class MyValidation
{ 

    public bool status
        {
            get { return (bool)GetValue(statusProperty); }
            set { SetValue(statusProperty, value); }
        }

        public static readonly DependencyProperty statusProperty =
            DependencyProperty.Register("status", typeof(bool), typeof(MyValidation),new PropertyMetadata(false) );

}

2

您应该在构造函数中初始化所有非依赖属性,特别是您正在调用的默认无参构造函数。可以像您使用 new PropertyMetadata(new Appearance()); 一样为依赖属性设置默认值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接