它的ownerType不是DependencyObject的DependencyProperty有什么用?

时间:2011-02-25 09:48:31

标签: c# wpf dependency-properties dependencyobject

我刚刚开始在WPF中使用DependencyProperties,我想要在掌握它们时检查一些想法。

给出以下内容(暂时忽略命名约定):

class MyTestClass
{
    public static readonly DependencyProperty dp1 = DependencyProperty.Register("MyProp", typeof(String), typeof(MyTestClass));

    public static readonly DependencyProperty dp2 = DependencyProperty.Register("MyProp2", typeof(String), typeof(MyTestClass), new PropertyMetadata("Hello"));
}

我发现dp2抛出一个TypeInitializationException,消息“'MyTestClass'类型必须从DependencyObject派生”,这是我所期望的,但dp1很高兴被接受。

现在,我理解为什么dp2引发异常,因为我试图在不是DependencyObject的类型上注册属性元数据,这很好。我已经看了下,并且可以看到dp1和dp2都遵循的代码路径,所以我从代码的角度理解为什么dp1不会引发异常,但从概念上讲我会期望dp1和dp2都引发相同的异常。

我的问题是在创建像owner不是DependencyObject的dp1这样的DependencyProperty时会有什么用处,因为我看不到如果没有DependencyObject上的GetValue / SetValue方法就可以使用它。

1 个答案:

答案 0 :(得分:3)

修改
第一个Register-Signature的原因是注册一个DependencyProperty,它没有可以通过Clear - 方法恢复的默认值,也没有注册的值更改回调。

因为没有默认值,所以不会检查默认值是否有效,因此不会抛出您的异常。但是没有使用这样的注册。你没有任何好处,事实上它不会抛出异常并不意味着它对某些东西有益 - 它只是没有错。