2010-12-19 3 views
3

Ich habe eine DataBound (via HierachicTemplates) WPF TreeView, die gut mit der Maus funktioniert, aber ich möchte es mit der Tastatur fahren können. Ich habe CommandBindings hinzugefügt, damit ContextMenu-Elemente über 'Gesten' ausgeführt werden können; wie STRG + Löschen, um das aktuell ausgewählte Element zu entfernen, aber ich möchte, dass die Taste 'Eigenschaften' das Kontextmenü anzeigt und der Benutzer in der Lage ist, die Cursortasten zum Navigieren zu verwenden.Verwenden der Tastatur zum Anzeigen eines Kontextmenüs in einer Datengrenze WPF TreeView

Ich habe eine CommandBinding erstellt und debuggte, aber das RoutedUIEvent hat ein ContextMenu. Ich habe versucht, es aus den Xmal Resources zu erstellen und das hat funktioniert, aber es ist eindeutig nicht korrekt, da alles deaktiviert ist.

Wie erstelle ich ein WPF ContextMenu, dass ich mit der Tastatur navigieren kann?

Antwort

2

ich es geschafft, eine Kontrolle des ContextMenu wie folgt angezeigt:

  • hören für Keyboard (Eigenschaft Taste nach unten zum Beispiel)
  • im Handler, erhalten Sie Ihre Steuerung (nach Name oder was auch immer Methode)
  • Wenn Sie Ihre Kontrolle haben, tun Sie einfach: myControl.ContextMenu.IsOpen = true;

hoffe, es hilft.

+0

Versucht, aber dies ist eine TreeView das Ereignis wird auf ein TextBlock-Element abgefeuert, das der Knoten in der Struktur ist und kein ContextMenu hat. Dies scheint an etwas Höheres gebunden zu sein (der visuelle Baum?). Das contextMenu ist eine TreeView-Ressource. Ich habe auch versucht, das Kontextmenü auf dem TextBlock zu platzieren, aber das schien nicht zu helfen. – Robert

+0

Das Problem hier liegt meiner Meinung nach in der Kontrolle, auf der das ContextMenu gesetzt werden. Wenn Ihr Ereignis in einem textBlock ausgelöst wird, würde ich vorschlagen, in der Baumansicht mit der Eigenschaft "ContextMenu" nach dem nächsten Elternteil dieses Textblocks zu suchen, Ihr contextMenu auf dieses Steuerelement zu setzen und dann nach dem Absetzen des Ereignisses die visualTree von Ihrem TextBlock, um dieses übergeordnete Steuerelement zu erhalten und das "ContextMenu.IsOpen = true" auszuführen, wie ich es vorgeschlagen habe. Ich sehe keinen einfacheren Weg, dies zu tun. – David

Verwandte Themen