【发布时间】:2012-05-29 21:09:22
【问题描述】:
我们有两个外部定义的、逻辑上独占(业务方面)的附加属性,它们都是可继承的。取决于哪个设置最接近我们正在阅读的 DependencyObject,这决定了我们在逻辑中使用哪个,如下所示。
注意:我不想知道它是继承的,你可以通过DependencyPropertyHelper.GetValueSource 来做,我想知道从哪里开始,所以我可以确定优先级。
考虑以下可视树层次结构和附加属性:
Root // <-- AProp1 first set here
Child
GrandChild // <-- AProp2 first set here
GreatGrandChild // <-- AProp1 re-applied here
GreatGreatGrandChild
-
在 Root 的情况下,AProp1 是单独设置的,因此我们使用 AProp1。
-
在 Child 的情况下,AProp1 是继承的,因此我们仍然使用 AProp1。
-
在 GrandChild 的情况下,设置了 AProp2,但由于继承,AProp1 也具有值。但是,由于 AProp2 直接设置在此对象上(即距离“0”级的距离)与 AProp1(距离“2”的距离),因此 AProp2 优先于我们的业务逻辑。
-
在 GreatGrandChild 的情况下,同样由于 AProp1 已设置(距离为“0”),它优先于 AProp2(距离为“1”)
-
最后,在 GreatGreatGrandChild 的情况下,AProp1 和 AProp2 都是通过继承获取的,但是由于 AProp1 在层次结构中设置得更近(距离为“1”)与 AProp2(距离为“2”) , AProp1 就是我们要使用的那个。
如果我能找到源头,我知道我可以简单地走链条并计算距离。我只需要源代码。
注意:
为了记录,是的,它们都可以设置在同一级别,在这种情况下 AProp2 将优先,但这与这个问题无关。
即使使用 same 值作为提高其优先级的一种方式,也可以重新应用属性(请参阅 GreatGrandChild)。这就是为什么我需要知道源在哪里/离我正在检查的元素有多远。
【问题讨论】:
标签: wpf inheritance dependency-properties attached-properties