7

我刚刚开始在 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 都会引发相同的异常。

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

4

1 回答 1

3

编辑
第一个注册签名的原因是注册一个DependencyProperty没有可以通过Clear-method 恢复的默认值并且也没有注册值更改回调的原因。

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

于 2011-02-25T09:57:49.230 回答