2009-04-09 2 views

Antwort

1

Im Allgemeinen speichern Sie den TreeView-Knoten (z. B. die Quelle des Popup-Ereignisses, vielleicht der ausgewählte Knoten - abhängig von Ihrer Schnittstelle in einer privaten Variablen auf Klassenebene im "Pop-up" -Ereignis des ContextMenus) , dann verweisen Sie auf diese Variable im Click-Ereignis des Menüs.

+0

Das ist eine gute Idee. Weißt du, ob das Popup-Ereignis ContextMenuOpening ist? Weder ContextMenuOpening noch ContextMenuClosing werden ausgelöst, wenn ich das Menü öffne. – sker

+0

Sollte das Geöffnete Ereignis sein. http://msdn.microsoft.com/en-us/library/system.windows.controls.contextmenu.opened.aspx – dommer

+0

Ok, ich benutze Telerik Treeview und es hat keine Opened-Event, aber ich habe es geschafft Mach es mit dem MouseRightButtonUp-Ereignis. Vielen Dank. – sker

2

Alternativ, wenn Sie RoutedUICommands verwenden, können Sie die OriginalSource Eigenschaft auf ExecuteRoutedEventArgs und CanExecuteRoutedEventArgs verwenden, um die FrameworkElement zu finden, wo Command seine Blase begann.

Die OriginalSource jedoch möglicherweise der innere TextBlock oder ein anderes Element in der DataTemplate des Knotens, so dass Sie den VisualTreeHelper verwenden müssen, um die Eltern, die Sie möchten, zu finden. Ich habe einen Wrapper um diese Funktionalität implementiert, der dem folgenden ähnelt: http://www.hardcodet.net/2008/02/find-wpf-parent/

Dieser Ansatz ist gut, wenn Sie Ihre Befehlslogik in einer großen Anwendung trennen/zentralisieren möchten.

+0

Ich hatte sehr viel Glück mit der DataContext-Eigenschaft auf der OriginalSource, wenn ich mit der Datenbindung ganz durchging. OriginalSource sollte immer ein FrameworkElement sein. –

+0

Mein Problem ist jetzt gelöst, aber Ihre Lösung scheint ziemlich gut zu sein. Ich werde es in den nächsten Tagen überprüfen. Vielen Dank. – sker

1

// hat es doch einen besseren Weg, als diese ... TreeViewItem tvi = (((Absender als MenuItem) .Parent als ContextMenu) .Parent als Popup) .PlacementTarget als TreeViewItem sein;

Das funktioniert, aber warum sollte ich es nicht so machen?

Verwandte Themen