我刚开始接触 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这样ownerType不是DependencyObject的DependencyProperty有什么用处,因为我看不出它如何在没有DependencyObject上的GetValue/SetValue方法的情况下使用。