WPF-Untermenü-Styling

8

Ich habe einen ContextMenu-Stil und einen MenuItem-Stil, die beide im oberen Menü korrekt funktionieren. Das Problem ist, wenn ich einem Menüpunkt ein Untermenü hinzufüge, dann wird das Untermenü nicht richtig gestylt. Es sieht so aus, als ob Sie das Menüelement nur an diesem Punkt und nicht im eigentlichen Untermenü formatieren können, so dass Sie den IsMouseOver-Stil nicht ersetzen können (es wird nur das in Windows aktivierte Thema verwendet).

Ich habe gesucht und gesucht. Das nächste, was ich finden kann, ist dieser Forenbeitrag auf MSDN Ссылка , aber es beantwortet die Frage auch nicht richtig, da sein Beispiel das gleiche Problem hat, in das ich hineinrenne. Jede Hilfe wäre willkommen! Vielen Dank im Voraus.

Bearbeiten: Jay, das mache ich. Hier ist ein Code in UserControl.Resources als oberstes Objekt.

%Vor%

und dann so etwas für das Menü

%Vor%

Alles auf der NewCommand-Ebene ist korrekt formatiert, in NewCommand wird DeleteCommand angezeigt, das MenuItem selbst ist richtig formatiert, aber das eigentliche Menü ist standardmäßig auf das Windows-Design eingestellt, und ich sehe keine Möglichkeit, das bisher zu überschreiben. Der wichtigste Teil besteht darin, dass das IsMouseOver-Untermenü das gleiche Aussehen und Verhalten wie die Hauptmenüstruktur erhält.

    
user64718 02.08.2010, 21:05
quelle

3 Antworten

13

Wie versprochen, hier ist der Code. Danke für deine Hilfe Jay, führe mich in die richtige Richtung, um endlich eine Antwort auf MSDN Ссылка zu finden MenuItem und ContextMenu steuern das Styling für das Basismenü und die anderen beiden sind für die Untermenüpunkte. Jay's Art hat vielleicht funktioniert, aber ich konnte es leider nicht erreichen. Dies funktioniert jedoch perfekt und ermöglicht wahrscheinlich viel mehr Kontrolle über das Untermenüs Styling.

%Vor%     
user64718 03.08.2010, 03:13
quelle
1

Wie wenden Sie Ihre Stile an?

Wenn Sie in den Ressourcen eines Elements "high" oder "outer" als Stil definieren und ihm keinen Schlüssel zuweisen, gilt dies normalerweise für alle Elemente des folgenden Zieltyps.

Machen Sie dies und sehen Sie unerwartetes Verhalten oder versuchen Sie, Stile auf jeder Ebene inline zu definieren / anzuwenden?

bearbeite 1

Wenn Sie sich Ihr XAML ansehen, ist das Problem, dass Sie ContextMenu formatieren, aber darunter liegende Menüs vom Typ Menu . Das erste, was ich versuchen würde, ist das Attribut TargetType für Style in Menu zu ändern. Sehen Sie, ob das auf allen Ebenen angewendet wird. Wenn nicht, würde ich es zurück ändern und ein weiteres Style targeting Menu hinzufügen und sehen, ob das auf das Untermenü angewendet wird.

bearbeite 2

Okay, ich denke, ich habe deine Antwort. Das Untermenü ist tatsächlich ein MenuItem , was offensichtlich ist, wenn man sich das XAML anstelle des Ergebnisses ansieht. Die Vorlage und das Design, die Sie für ContextMenu festlegen, müssen auch auf einem beliebigen MenuItem festgelegt werden, bei dem es sich um ein Untermenü handelt. Ich habe es ausprobiert und einen Style erstellt, der MenuItem auf eine Kontrollschablone und Trigger für IsMouseOver abzielt, und es scheint zu tun, was du versuchst.

    
Jay 02.08.2010 21:15
quelle
0

Um die Vorlagen nicht zu duplizieren, erstellen Sie am besten einen mit PART_Popup und einem Pfeil für das Untermenü, aber blenden den Fehler aus, bis Sie mit der Rolle als SubmenuHeader ausgelöst werden.

    
MikNik 19.07.2012 08:16
quelle

Tags und Links