/ / Ako získam zdroj udalosti ContextMenu pochádzajúcej z WPF? - .net, wpf, stromové zobrazenie, kontextové menu

Ako môžem získať zdroj udalosti založenej na ContextMenu v WPF? - .net, wpf, treeview, contextmenu

Mám TreeView s ContextMenu with Clickdiania. Keď sa spustí udalosť kliknutia v kontextovej ponuke, dostanem MenuItem ako zdroj udalosti, samozrejme. Ako zistím, ktorý uzol v TreeView bol ten, ktorý spustil ContextMenu?

odpovede:

1 pre odpoveď č. 1

Uzol TreeView zvyčajne ukladáte (napr. zdroj vyskakovacej udalosti, prípadne zvolený uzol - do určitej miery závisí od vášho rozhrania) v premennej na úrovni triedy v kontextovej udalosti „ContextMenu“, potom odkazujte na túto premennú v ponuke „ s udalosť kliknutia.


2 pre odpoveď č. 2

Prípadne, ak používate RoutedUICommands môžete použiť OriginalSource majetok na ExecuteRoutedEventArgs a CanExecuteRoutedEventArgs nájsť FrameworkElement kde Command začal svoju bublinu.

Na OriginalSource možno však vnútorný TextBlock alebo inýv uzle DataTemplate, takže budete musieť použiť VisualTreeHelper na nájdenie požadovaného rodiča. Implementoval som okolo tejto funkcie obal, ktorý je podobný: http://www.hardcodet.net/2008/02/find-wpf-parent/

Tento prístup je dobrý, ak chcete oddeliť / centralizovať svoju logiku príkazov vo veľkej aplikácii.


1 pre odpoveď č. 3

// musí existovať lepší spôsob ako toto ... TreeViewItem tvi = (((odosielateľ ako MenuItem) .Parent ako ContextMenu) .Parent ako Popup) .PlacementTarget as TreeViewItem;

Funguje to, ale prečo by som to mal robiť?