У мене є 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 я це роблю так?