2

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

4

3 に答える 3

2

または、使用している場合は、 on プロパティを使用RoutedUICommandsして、バブルが始まった場所を見つけることができます。OriginalSourceExecuteRoutedEventArgsCanExecuteRoutedEventArgsFrameworkElementCommand

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

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

于 2009-04-10T11:17:27.977 に答える
2

//これよりも良い方法があるに違いありません... TreeViewItem tvi = (((MenuItem としての送信者。ContextMenu としての親。Popup としての親。TreeViewItem としての PlacementTarget;

これは機能しますが、なぜこのようにすべきではないのでしょうか?

于 2010-09-27T02:42:27.697 に答える
1

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

于 2009-04-09T19:53:57.337 に答える