2009-04-09 15 views

答えて

1

一般に、ContextMenuの「ポップアップ」イベントのプライベートクラスレベルの変数で、TreeViewノード(ポップアップイベントのソース、選択されたノードなど - あなたのインターフェイスにある程度依存します)を保存しますメニューのクリックイベントでその変数を参照します。あなたがRoutedUICommandsを使用している場合

+0

これは良い考えです。ポップアップイベントがContextMenuOpeningかどうか知っていますか?なぜなら、メニューを開くとContextMenuOpeningもContextMenuClosingも起動しないからです。 – sker

+0

Openedイベントである必要があります。 http://msdn.microsoft.com/en-us/library/system.windows.controls.contextmenu.opened.aspx – dommer

+0

私はtelerikのツリービューを使用していますが、Openedイベントはありませんが、 MouseRightButtonUpイベントで行います。ありがとうございました。 – sker

2

また、あなたはCommandはそのバブルを始めFrameworkElementを見つけることExecuteRoutedEventArgsCanExecuteRoutedEventArgsOriginalSourceプロパティを使用することができます。

しかし、OriginalSourceは内部のTextBlockやノードのDataTemplateの他の要素かもしれないので、VisualTreeHelperを使用して必要な親を探す必要があります。私は、次のようなこの機能をラッパーとして実装しました。 http://www.hardcodet.net/2008/02/find-wpf-parent/

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

+0

私は、データバインディングですべての方法を行っているときに、OriginalSourceのDataContextプロパティを使用して非常に幸運を覚えました。 OriginalSourceは常にFrameworkElementでなければなりません。 –

+0

私の問題は今解決されていますが、あなたの解決策はかなり良いようです。私は数日後にそれをチェックします。ありがとうございました。 – sker

1

//このより良い方法があるはずです... TreeViewItem tvi =((送信者としてMenuItem).ParentをContextMenuとして使用).Parent as Popup).PlacementTarget as TreeViewItem;

これは機能しますが、なぜ私はこのようにしてはいけませんか?

関連する問題