从 WPFFrameworkElement
中,如何捕获从根到可视化树路径的任何更改FrameworkElement
?即,何时将FrameworkElement
或其任何父级添加到视觉树的另一个分支,从中删除或移动到另一个分支?
- 我一直在寻找合适的事件,但是虽然
FrameworkElement
有一个OnVisualParentChanged
方法,但它没有提供一个相应的事件,可以在不继承框架元素的情况下注册处理程序。因此,这不能应用于任意的、已经实例化FrameworkElement
的 s。 - 理论上,A
RelativeSource
绑定在这里应该对我有帮助,但要让它工作,我已经需要知道我在寻找哪个父节点(什么类型,什么级别),但事实并非如此(见下文)。
用例:对于另一个问题,一个有希望的可能解决方案是使用当前NameScope
相关的 a FrameworkElement
。NameScope
可以从NameScope
附加属性中检索适当的实例,但它不是为树中的每个节点设置的,仅用于从控件模板和窗口构造的可视树的根。
因此,要找到适合NameScope
我的FrameworkElement
,我需要沿着可视化树向上走,直到找到一个null
为附加属性设置了非值的节点NameScope
,并且我必须重做此操作以可能NameScope
每次更新我上面的视觉树FrameworkElement
已经改变。
这个讨论涉及到这个话题,但它已经 6 岁了,没有解决方案。