/ / Jak uzyskać źródło zdarzenia inicjowanego w ContextMenu w WPF? - .net, wpf, widok drzewa, menu kontekstowe

Jak uzyskać źródło zdarzenia pochodzącego z kontekstu kontekstowego w WPF? - .net, wpf, widok drzewa, menu kontekstowe

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 № 1

Ogó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?