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

时间:2011-05-01 19:44:27

标签: wpf

我正在创建一个自定义的WPF控件,它是一个UserControl。此自定义控件具有两个属性(UnselectedAppearance和SelectedAppearance)。这两个属性都是从DependencyObject派生的相同类型(Appearance)。 Appearance类本身有几个DependencyProperties。我想知道为每个Appearance属性设置默认值的正确方法。我尝试过以下代码,但是当我尝试在设计器中使用自定义控件时会抛出异常。

public static readonly DependencyProperty UnselectedAppearanceProperty = DependencyProperty.Register("UnselectedAppearance", typeof(Appearance), typeof(FNDie), new PropertyMetadata(new Appearance()));

我有什么方法可以做到这一点吗?

3 个答案:

答案 0 :(得分:3)

依赖项属性的默认值在该依赖项对象的所有实例之间共享,因此除null之外的值通常仅对值类型或不可变类有意义。换句话说,你可能会学到很难的方法,null可能是你最好的选择。

如果您迫切需要为依赖项属性设置可变引用值,则可以将默认值保留为null并在构造函数中设置它。但是,您应该知道,这样做会使该属性无法使用样式进行设置,这可能是一个严重的限制,具体取决于您的需求。

答案 1 :(得分:2)

你需要像这样使用Property MetaData

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 :(得分:1)

您应该初始化您正在调用的构造函数中的所有非依赖项属性(这里是默认的无参数属性)。可以像使用new PropertyMetadata(new Appearance());

一样为依赖项属性指定默认值