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 templateswindow构造的可视树的根 .

因此,要为我的 FrameworkElement 找到合适的 NameScope ,我需要沿着可视树向上走,直到找到一个为 NameScope 附加属性设置了非 null 值的节点,我将不得不重做这个以更新 NameScope 每次我 FrameworkElement 上方的可视树中的任何内容都发生了变化 .

This discussion触及了这个话题,但它已经有6年了,并没有解决方案 .