WPF 内FrameworkElement
から、ルートから へのビジュアル ツリー パスへの変更をどのようにキャプチャできますFrameworkElement
か? つまり、FrameworkElement
、またはその親のいずれかが、ビジュアル ツリーの別のブランチに追加、削除、または移動されたときでしょうか。
- 適切なイベントを探していました
FrameworkElement
が、OnVisualParentChanged
メソッドはありますが、フレームワーク要素をサブクラス化せずにハンドラーを登録できる適切なイベントは提供されません。したがって、これは、すでにインスタンス化されている任意の s には適用できませんFrameworkElement
。 - 理論的には、
RelativeSource
バインディングがここで役立つはずですが、それが機能するためには、探している親ノード (タイプ、レベル) を知る必要がありますが、そうではありません (以下を参照)。
ユースケース:この他の質問について、有望な可能な解決策の 1 つは、現在のNameScope
関連を使用することFrameworkElement
です。適切なインスタンスは添付プロパティNameScope
から取得できますが、ツリー内のすべてのノードに対して設定されるわけではなく、コントロール テンプレートとウィンドウから構築されたビジュアル ツリーのルートに対してのみ設定されます。NameScope
したがって、適切な を見つけるにはNameScope
、添付プロパティに値が設定されFrameworkElement
ていないノードが見つかるまでビジュアル ツリーを上っていく必要があります。上のビジュアル ツリーが変更されました。null
NameScope
NameScope
FrameworkElement
この議論はこのトピックに触れていますが、すでに 6 年前のものであり、解決策はありません。