Mam TreeView z ContextMenu z Clickwydarzenia Kiedy uruchamia się zdarzenie kliknięcia w menu kontekstowym, oczywiście otrzymuję MenuItem jako źródło zdarzenia. Jak mogę dowiedzieć się, który węzeł w TreeView był tym, który uruchomił ContextMenu?
Odpowiedzi:
1 dla odpowiedzi № 1Ogólnie przechowujesz węzeł TreeView (np. źródło zdarzenia wyskakującego, może wybrany węzeł - do pewnego stopnia zależy od interfejsu) w prywatnej zmiennej na poziomie klasy w zdarzeniu „wyskakującym” w ContextMenu, a następnie odwołaj się do tej zmiennej w menu „ s zdarzenie kliknięcia.
2 dla odpowiedzi nr 2
Alternatywnie, jeśli używasz RoutedUICommands
możesz użyć OriginalSource
własność na ExecuteRoutedEventArgs
i CanExecuteRoutedEventArgs
znaleźć FrameworkElement
gdzie Command
zaczął swoją bańkę.
The OriginalSource
jednak może wewnętrzny TextBlock lub innyelement w DataTemplate węzła, więc będziesz musiał użyć VisualTreeHelper, aby znaleźć żądanego rodzica. Zaimplementowałem opakowanie wokół tej funkcji, które jest podobne do:
http://www.hardcodet.net/2008/02/find-wpf-parent/
Takie podejście jest dobre, jeśli chcesz oddzielić / scentralizować logikę poleceń w dużej aplikacji.
1 dla odpowiedzi nr 3
// musi być lepszy sposób niż ten ... TreeViewItem tvi = (((nadawca jako MenuItem) .Parent jako ContextMenu) .Parent jako Popup) .PlacementTarget jako TreeViewItem;
To działa, ale dlaczego POWINNO to zrobić w ten sposób?