Clickイベントを持つContextMenuを持つTreeViewがあります。コンテキストメニューのクリックイベントが発生すると、明らかにイベントのソースとしてMenuItemが取得されます。 ContextMenuをトリガーしたノードは、TreeViewのどのノードを取得するのですか?WPFでContextMenu起点イベントのソースを取得するにはどうすればよいですか?
答えて
一般に、ContextMenuの「ポップアップ」イベントのプライベートクラスレベルの変数で、TreeViewノード(ポップアップイベントのソース、選択されたノードなど - あなたのインターフェイスにある程度依存します)を保存しますメニューのクリックイベントでその変数を参照します。あなたがRoutedUICommands
を使用している場合
また、あなたはCommand
はそのバブルを始めFrameworkElement
を見つけることExecuteRoutedEventArgs
とCanExecuteRoutedEventArgs
にOriginalSource
プロパティを使用することができます。
しかし、OriginalSource
は内部のTextBlockやノードのDataTemplateの他の要素かもしれないので、VisualTreeHelperを使用して必要な親を探す必要があります。私は、次のようなこの機能をラッパーとして実装しました。 http://www.hardcodet.net/2008/02/find-wpf-parent/
大規模なアプリケーションでコマンドロジックを分離/集中する場合は、この方法が適しています。
私は、データバインディングですべての方法を行っているときに、OriginalSourceのDataContextプロパティを使用して非常に幸運を覚えました。 OriginalSourceは常にFrameworkElementでなければなりません。 –
私の問題は今解決されていますが、あなたの解決策はかなり良いようです。私は数日後にそれをチェックします。ありがとうございました。 – sker
//このより良い方法があるはずです... TreeViewItem tvi =((送信者としてMenuItem).ParentをContextMenuとして使用).Parent as Popup).PlacementTarget as TreeViewItem;
これは機能しますが、なぜ私はこのようにしてはいけませんか?
- 1. WPF:サブメニューでMenuItemのContextMenuを取得するにはどうすればよいですか?
- 2. iframeのソースを取得するにはどうすればよいですか?
- 3. ブレークポイントまで起動したASP.NETイベントのリストを取得するにはどうすればよいですか?
- 4. WPF - MainWindowインスタンスを取得するにはどうすればよいですか?
- 5. イベントIDでイベントをフルカレンダーに取得するにはどうすればよいですか?
- 6. WPF ContextMenu Woes:ContextMenuのDataContextを設定するにはどうすればよいですか?
- 7. 標準のwpfイベントを自分のイベントでラップするにはどうすればよいですか?
- 8. contextMenuを縮小するにはどうすればよいですか?
- 9. wpfアプリケーションで開いているファイルパス文書を取得するにはどうすればよいですか?
- 10. Image.xcassetsをソース管理下で取得するにはどうすればよいですか?
- 11. WPFでキャンバス上にボタンの位置を取得するにはどうすればよいですか?
- 12. iPhoneのウェブアプリケーションでキーボードからイベントを取得するにはどうすればよいですか?
- 13. ページからHTMLソースを取得するにはどうすればよいですか?
- 14. WPFのDocumentViewerでソースXPSドキュメントのファイルロックを解除するにはどうすればよいですか?
- 15. WPFでComboBoxのインデックスの総数を取得するにはどうすればよいですか?
- 16. ItemAddingイベントのSharePoint ItemEventRecieverでファイルの詳細を取得するにはどうすればよいですか?
- 17. .onsubmitイベントで実行する関数を取得するにはどうすればよいですか?
- 18. Vimは、起動する端末の行数を取得するにはどうすればよいですか?
- 19. Windows XPでWPFウィジェットの「ネイティブ」な外観を取得するにはどうすればよいですか?
- 20. WPFでListViewの項目を取得するにはどうすればよいですか?
- 21. WPFキャンバスで文字列のテキストサイズを取得するにはどうすればよいですか?
- 22. スタックを取得してソースを収集するにはどうすればよいですか?
- 23. WPFテキストブロックで段落を取得するにはどうすればよいでしょうか? (改行文字?)
- 24. スクリプトを実行するために_received_iCalイベントを取得するにはどうすればよいですか?
- 25. 提出イベントをフォームにバインドするバックボーンを取得するにはどうすればよいですか?
- 26. IEのsIFR埋め込みタグでclickイベントを取得するにはどうすればよいですか?
- 27. C#でグローバルカーソルアイコンの変更イベントを取得するにはどうすればよいですか?
- 28. PowerShellでGUIイベントのソースにアクセスするにはどうすればよいですか?
- 29. WPFで調整可能な「フレーム」を取得するにはどうすればよいですか?
- 30. TabControl ContextMenuコマンドをバインドするにはどうすればいいですか?
これは良い考えです。ポップアップイベントがContextMenuOpeningかどうか知っていますか?なぜなら、メニューを開くとContextMenuOpeningもContextMenuClosingも起動しないからです。 – sker
Openedイベントである必要があります。 http://msdn.microsoft.com/en-us/library/system.windows.controls.contextmenu.opened.aspx – dommer
私はtelerikのツリービューを使用していますが、Openedイベントはありませんが、 MouseRightButtonUpイベントで行います。ありがとうございました。 – sker