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