私はクリックで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私はこのようにしますか?