【问题标题】:What use is a DependencyProperty whose ownerType is not a DependencyObject?ownerType 不是 DependencyObject 的 DependencyProperty 有什么用?
【发布时间】:2011-02-25 09:48:30
【问题描述】:

我刚开始在 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 方法的情况下如何使用它。

【问题讨论】:

    标签: c# wpf dependency-properties dependencyobject


    【解决方案1】:

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

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

    【讨论】:

    • 您好,感谢您的回复。我理解为什么可以将 ownerType 设置为任何对象并在运行时执行检查。但是,我的问题实际上是,为什么以下内容不会引发运行时异常,因此以这种方式创建 DependencyProperty 有什么用处: DependencyProperty.Register("MyProp", typeof(String), typeof(MyTestClass));
    • @Matt__E_:对不起,我会更准确地阅读这个问题。我已经改变了我的答案。顺便说一句 +1 的问题。
    • 您好,HCL。非常感谢您花时间阅读我的评论并再次回复。我非常感谢。我认为以这种方式注册 dp1 没有任何用处,但由于它没有引发异常,我认为它一定有一个我不知道的目的。感谢您确认它没有任何用处。
    猜你喜欢
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 2012-07-11
    • 1970-01-01
    • 2021-07-16
    • 2010-10-27
    相关资源
    最近更新 更多