为什么我可以访问未在我的DependencyObject上注册的DependencyProperties?

8
我希望有人能够解释一些我在探索 DependencyObjects 和 DependencyProperties 过程中遇到的意外行为。
考虑以下简单类:
    class SomeClass : DependencyObject {
    }

我很乐意编写以下代码:

public static void Test() {
  SomeClass a = new SomeClass();
  Console.WriteLine(a.GetValue(EllipseGeometry.RadiusXProperty));
  a.SetValue(EllipseGeometry.RadiusXProperty, 3.24 );
  Console.WriteLine(a.GetValue(EllipseGeometry.RadiusXProperty));
}

这将会产生以下输出:

0
3.24

我的类与EllipseGeometry类没有任何关系,我也没有将我的类作为EllipseGeometry.RadiusXProperty属性的所有者添加,也没有使用RegisterAttached(),那么为什么这样做可以?似乎我可以很愉快地将任何DP添加到我的DO中,而不会引发框架错误。

有人觉得这个行为奇怪吗?我本来期望会出现"您未向此对象注册此属性"之类的异常......请问是否有特定的用途可以通过这种方式将DP添加到DO中?因为我无法看到允许这种行为的目的。

非常感谢, Matt


我猜 SomeClass 应该是指 TestClass(或者反过来)? - Steven Jeuris
EllipseGeometry.RadiusXProperty是一个附加属性吗? - Double Down
嗨,Steven,你猜对了,我有一个复制粘贴错误。我已经将TestClass重命名为SomeClass。现在已经很晚了,我还能说什么呢?感谢你抽出时间来回答。 - Matt__E_
嗨DoubleDown,EllipseGeometry.RadiusXProperty只是我选择用来阐述问题的一个随机DependencyProperty,就我所知,它并没有什么特别之处。SomeClass除了上面发布的内容外没有更多的东西 - 看起来我可以在任何DO上以这种方式使用任何DP,这似乎有点奇怪。谢谢回复。 - Matt__E_
将DP分配给实际上没有该DP的DO并不会造成任何损害,那么为什么要浪费时间进行不必要的错误检查呢? - Gabe
1个回答

1

这种行为允许您使用附加属性。如果没有它,例如,您如何在TextBox上使用Grid.Row。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接