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ď č. 1Uzol 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ť?