Frage

N. B DIESE FRAGE aktualisiert wurde, LESEN weiter unten

Hallo,

ich eine benutzerdefinierte Kontextmenü erstellen möchten, die vier Untermenüs, die jeweils in ihrem eigenen Quadranten (oben links, oben rechts, unten links, unten rechts). Ähnliches Studio in 3ds Max.

Dies ist, wie ich das Problem angesprochen habe, so weit: - ein benutzerdefiniertes WPF-Steuerelement, leiten sie von ContextMenu [1]
erstellen - festzustellen, 4 Abhängigkeitseigenschaften von ContextMenu, diese werden Menüs angezeigt und können von XAML eingestellt werden
. - AddOwner zum ContextMenu.IsOpenProperty, das Hinzufügen einer Eigenschaft geändert Benachrichtigung
. - wenn die IsOpen Eigenschaft ändert die IsOpen Eigenschaft von 4 Kinderkontextmenüs eingestellt
. - mit ContextMenuService stellen Sie den vertikalen und horizontalen Versätze des Kontextmenüs, um sie in jedem Quadranten erscheinen zu lassen; die tatsächliche Höhe und Breite Bindungseigenschaften der Offsets zu berechnen.

[1] Benötigen Sie aus dem Kontextmenü abzuleiten sonst Sie es auf die ContextMenu-Eigenschaft auf dem Fenster nicht zuordnen können.

Das erscheint zu arbeiten, gibt es Probleme mit den Menüs nicht offen bleiben (sie als Fokus geschlossen sind wird außerhalb des Menüs ist), aber ich bin sicher, mit Reflector.NET einen Weg, um diese finden.

Dies ist mein erstes benutzerdefiniertes WPF-Steuerelement, die ich versucht habe zu schreiben; und nicht sicher, ob dies bester Ansatz ist.

Irgendwelche Vorschläge / Ideen, wie dieses Quad Kontextmenü erstellen?

War es hilfreich?

Lösung 2

UPDATE

OK. Nachdem das Spiel mit benutzerdefinierten Kontrollen habe ich etwas, das funktioniert besser als vorher. Alle Menüs bleiben geöffnet.

Was ich getan habe:
- erstellte benutzerdefinierte Steuerelement mit dem Namen QuadContextMenu von ContextMenu ableiten, überschreiben die Standard-Style Schlüssel
. - der Stil für die Steuerung verfügt über 4 Popup-Primitiven:
    - jeweils mit PART_ Namen, damit ich ihnen eine Referenz, wenn die OnApplyTemplate
.     - jeder hat Kind QuadMenu, die individuelle Steuerung von MenuBase Ableitung
.     - jeder hat seine VerticleOffset und Horizontal Eigenschaften der Actual und Actual des Kindes Bindung [2].

QuadMenu Style / Control Template:
- hat eine klassische Grenze mit einem DockPanel und eine Grenze mit einem Textblock auf die Menünamen zu setzen.

[2] Wie man die Menüs in das Quad positionieren: - TopLeft versetzt ist negativ die tatsächliche Breite und Höhe
- TopRight versetzt ist negativ die tatsächliche Höhe
- bottom versetzt ist negativ die tatsächliche Höhe
- Bottom ist nicht Offset und ist in seiner ursprünglichen Lage

Neue Fragen / Probleme

Dies sind die nächsten Herausforderungen machen diese Steuerung:
1. zur Zeit Tastatur und Maus gesperrt / durch das erste Menü gefangen Sie konzentrieren sich auf und die anderen sind durch schwebt über ihnen nicht zur Verfügung. was bedeutet, dass Sie nur 1 der Menüs verwenden können.
2. Flip der MenuItem so daß für den TopLeft / bottom Untermenü auf der linken Seite öffnet.

Ich habe bereits versucht, durch Überschreiben der GetContainerForItemOverride Methoden, um den Menüpunkt zu ersetzen QuadMenuItem zurückzukehren. QuadMenuItem ist eine individuelle Steuerung von MenuItem abzuleiten. Wenn ich dies tun aber verliere ich die Untermenüs Funktionalität, die frustrierend ist.

Wenn jemand irgendwelche Tipps / Tricks / Vorschläge hat, wie diese Probleme zu bewältigen wäre es sehr zu schätzen! : D Danke

Andere Tipps

kann ich zwei Ansätze denken, keiner unbedingt so sauber sind, aber hat das Potenzial, zu arbeiten, wenn Sie die Zeit haben.

Ansatz 1

ein Kontextmenü verwenden, aber die Vorlage es durch Einstellung machen, so dass die ContextMenu wirklich nur eine Kontrolle zeigt, dass andere Fenster öffnen passiert. Vielleicht kann Tricks gemacht werden, so dass diese sekundären Menüs öffnen nicht den Fokus weg nimmt. Dies könnte am Ende noch das ursprüngliche Problem verursacht.

Ansatz 2

Was passiert, wenn Sie ContextMenu.StaysOpen auf false gesetzt und dann zu steuern versuchen, wenn das Menü selbst schließt?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top