From within a WPF FrameworkElement, how can I capture any changes to the visual tree path from the root to the FrameworkElement? 即当 FrameworkElement
或其任何父项被添加到,移动或移动到可视树的另一个分支时?
-
我一直在寻找适当的事件,但是
FrameworkElement
有一个OnVisualParentChanged method,它没有提供一个相应的事件,可以在没有子类化框架元素的情况下注册处理程序 . 因此,这不能应用于任意的,已经实例化的FrameworkElement
. -
理论上,A RelativeSource绑定应该对我有所帮助,但为了实现这一点,我已经需要知道我正在寻找哪个父节点(什么类型,什么级别),但事实并非如此(见下文) .
Use case: 对于this other question,一个有希望的可能解决方案将涉及使用与 FrameworkElement
相关的当前NameScope . 可以从NameScope attached property检索相应的 NameScope
实例,但不为树中的每个节点设置它,仅针对从control templates和window构造的可视树的根 .
因此,要为我的 FrameworkElement
找到合适的 NameScope
,我需要沿着可视树向上走,直到找到一个为 NameScope
附加属性设置了非 null
值的节点,我将不得不重做这个以更新 NameScope
每次我 FrameworkElement
上方的可视树中的任何内容都发生了变化 .
This discussion触及了这个话题,但它已经有6年了,并没有解决方案 .