我刚刚开始在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消息“我必须从DependencyObject派生'MyTestClass'类型”,但是我很高兴地接受了dp1。

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

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

最佳答案

编辑
第一个Register-Signature ist注册一个DependencyProperty的原因,该Clear没有可以由ojit_code -method恢复的默认值,也没有注册值更改回调。

因为没有默认值,所以不会检查默认值是否有效,因此不会引发您的异常。但是,没有使用这种注册。您不会从中受益,并且它不会引发异常并不意味着它对某些事物有好处-但这并非错误。

关于c# - OwnerType不是DependencyObject的DependencyProperty有什么用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5115750/

10-11 07:07