在WPF FrameworkElement
中,如何捕获从根到FrameworkElement
的可视树路径的任何更改?,即FrameworkElement
时,或其任何父母,是否被添加到视觉树的另一个分支,从中移除或移动到另一个分支?
FrameworkElement
有一个OnVisualParentChanged
method,它没有提供一个相关事件,即可以在没有子类化框架元素的情况下注册处理程序。因此,这不能应用于任意的,已经实例化的FrameworkElement
s。RelativeSource
绑定应该对我有所帮助,但为了实现这一点,我已经需要知道我正在寻找哪个父节点(什么类型,什么级别),但事实并非如此(见下文)。 用例对于this other question,一个有希望的可能解决方案将涉及使用与FrameworkElement
相关的当前NameScope
。可以从NameScope
attached property检索适当的NameScope
实例,但不为树中的每个节点设置它,仅针对从control templates和{{3}构造的可视树的根}。
因此,要为我的NameScope
找到合适的FrameworkElement
,我需要沿着可视树向上走,直到找到一个为{设置非null
值的节点{1}}附加属性,每当我NameScope
上方的可视树中的任何内容发生更改时,我都必须重做此更新NameScope
。
window触及了这个话题,但它已经有6年了,并没有解决方案。