/ / WPFでContextMenuから発信されたイベントのソースを取得するにはどうすればよいですか? -.net、wpf、treeview、contextmenu

WPFでContextMenuに由来するイベントのソースを取得するにはどうすればよいですか? - .net、wpf、treeview、contextmenu

私はクリックでContextMenuとTreeViewを持っていますイベント。コンテキストメニューのクリックイベントが発生すると、明らかにMenuItemがイベントのソースとして取得されます。 TreeViewのどのノードがContextMenuをトリガーしたかを取得するにはどうすればよいですか?

回答:

回答№1は1

通常、TreeViewノードを保存します(例: ポップアップイベントのソース、おそらく選択されたノード-インターフェースにある程度依存します)ContextMenuの「ポップアップ」イベントのプライベートクラスレベル変数で、メニューのその変数を参照しますsクリックイベント。


回答№2については2

あるいは、使用している場合 RoutedUICommands あなたは OriginalSource プロパティ ExecuteRoutedEventArgs そして CanExecuteRoutedEventArgs を見つける FrameworkElement どこで Command バブルを開始しました。

OriginalSource ただし、内部TextBlockまたはその他のノードのDataTemplateの要素です。したがって、VisualTreeHelperを使用して必要な親を見つける必要があります。この機能のラッパーを実装しました。 http://www.hardcodet.net/2008/02/find-wpf-parent/

このアプローチは、大規模なアプリケーションでコマンドロジックを分離/集中化する場合に適しています。


回答№3の場合は1

//これよりも良い方法でなければならない... TreeViewItem tvi =(((MenuItemとしての送信者).ContextMenuとしての親).Popupとしての親).TreementItemとしてのPlacementTarget;

これは機能しますが、どうしてSHOULDN "T私はこのようにしますか?