Click イベントを持つ ContextMenu を持つ TreeView があります。コンテキスト メニューのクリック イベントが発生すると、MenuItem がイベントのソースとして取得されます。ContextMenu をトリガーした TreeView のノードを取得するにはどうすればよいですか?
3 に答える
または、使用している場合は、 on プロパティを使用RoutedUICommandsして、バブルが始まった場所を見つけることができます。OriginalSourceExecuteRoutedEventArgsCanExecuteRoutedEventArgsFrameworkElementCommand
OriginalSourceただし、ノードの DataTemplate 内の内部 TextBlock または他の要素である可能性があるため、必要な親を見つけるには VisualTreeHelper を使用する必要があります。この機能のラッパーを次のように実装しました:
http://www.hardcodet.net/2008/02/find-wpf-parent /
このアプローチは、大規模なアプリケーションでコマンド ロジックを分離/集中化する場合に適しています。
//これよりも良い方法があるに違いありません... TreeViewItem tvi = (((MenuItem としての送信者。ContextMenu としての親。Popup としての親。TreeViewItem としての PlacementTarget;
これは機能しますが、なぜこのようにすべきではないのでしょうか?
通常、TreeView ノード (たとえば、ポップアップ イベントのソース、おそらく選択されたノード - インターフェースにある程度依存する) を ContextMenu の「ポップアップ」イベントのプライベート クラス レベル変数に格納し、次に参照します。メニューのクリックイベントでその変数。