2

WPF 内FrameworkElementから、ルートから へのビジュアル ツリー パスへの変更をどのようにキャプチャできますFrameworkElementか? つまり、FrameworkElement、またはその親のいずれかが、ビジュアル ツリーの別のブランチに追加、削除、または移動されたときでしょうか。

  • 適切なイベントを探していましたFrameworkElementが、OnVisualParentChangedメソッドはありますが、フレームワーク要素をサブクラス化せずにハンドラーを登録できる適切なイベントは提供されません。したがって、これは、すでにインスタンス化されている任意の s には適用できませんFrameworkElement
  • 理論的には、RelativeSourceバインディングがここで役立つはずですが、それが機能するためには、探している親ノード (タイプ、レベル) を知る必要がありますが、そうではありません (以下を参照)。

ユースケース:この他の質問について、有望な可能な解決策の 1 つは、現在のNameScope関連を使用することFrameworkElementです。適切なインスタンスは添付プロパティNameScopeから取得できますが、ツリー内のすべてのノードに対して設定されるわけではなく、コントロール テンプレートウィンドウから構築されたビジュアル ツリーのルートに対してのみ設定されます。NameScope

したがって、適切な を見つけるにはNameScope、添付プロパティに値が設定されFrameworkElementていないノードが見つかるまでビジュアル ツリーを上っていく必要があります。上のビジュアル ツリーが変更されました。nullNameScopeNameScopeFrameworkElement

この議論はこのトピックに触れていますが、すでに 6 年前のものであり、解決策はありません。

4

0 に答える 0