/ / Як я можу отримати джерело події ContextMenu у WPF? - .net, wpf, viewview, контекстуальне меню

Як отримати джерело події, створеної за допомогою ContextMenu у WPF? - .net, wpf, treeview, contextmenu

У мене є TreeView з ContextMenu з клацаннямподії. Коли подія натискання в контекстному меню спрацьовує, я, очевидно, я отримую MenuItem як джерело події. Як я можу отримати, який вузол у TreeView був тим, хто запустив ContextMenu?

Відповіді:

1 для відповіді № 1

Зазвичай ви зберігаєте вузол TreeView (наприклад, джерело спливаючої події, можливо, вибраний вузол - певною мірою залежить від вашого інтерфейсу) в приватній змінній рівня класу в події "спливаючого вікна" ContextMenu, а потім зверніться до цієї змінної в меню " s подія клацання.


2 для відповіді № 2

Або, якщо ви використовуєте RoutedUICommands ви можете скористатись OriginalSource власність на ExecuteRoutedEventArgs і CanExecuteRoutedEventArgs щоб знайти FrameworkElement де Command почав свою бульбашку.

The OriginalSource однак, можливо, внутрішній TextBlock або іншеелемент у вузлі "DataTemplate", тому вам потрібно буде використовувати VisualTreeHelper, щоб знайти потрібного батька. Я реалізував обгортку навколо цього функціоналу, схожого на: http://www.hardcodet.net/2008/02/find-wpf-parent/

Цей підхід хороший, якщо ви хочете відокремити / централізувати свою логіку команд у великій програмі.


1 для відповіді № 3

// має бути кращий спосіб, ніж цей ... TreeViewItem tvi = (((відправник як MenuItem) .Parent як ContextMenu). Parent як Popup) .PlacementTarget як TreeViewItem;

Це працює, але чому ДОЛЖЕН "T я це роблю так?