Frage

Ich versuche zu verhindern MenuStrip Kontrolle durch visuelle Stile beeinflusst werden.

Deshalb habe ich ein einfaches Formular mit einfacher Menüleiste und deaktivierten visuellen Stilen erstellt Main():

// Application.EnableVisualStyles(); <-- no visual styles
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());

was dieses Erscheinungsbild ergibt (beachten Sie den grauen Rand und Hintergrund):

enter image description here

Jetzt möchte ich das Gleiche tun und zwar so, dass andere Steuerelemente dieses Formulars von visuellen Stilen beeinflusst werden (ich möchte visuelle Stile nur für dieses Dropdown-Menü deaktivieren).

Also habe ich zunächst versucht, visuelle Stile zu deaktivieren DropDown von jedem ToolStripMenuItem, aber es hat nicht funktioniert.Dann habe ich versucht, visuelle Stile vollständig zu deaktivieren MenuStrip, aber das hat auch nicht funktioniert.

Hier ist der Code meines benutzerdefinierten MenuStrip:

class MPMenuStrip : MenuStrip
{
    [DllImportAttribute("uxtheme.dll")]
    private static extern int SetWindowTheme(IntPtr hWnd, string appname, string idlist);

    protected override void OnHandleCreated(EventArgs e)
    {
        // first attempt:
        foreach (ToolStripMenuItem menuItem in this.Items)
            SetWindowTheme(menuItem.DropDown.Handle, "", "");

        // second attempt:
        SetWindowTheme(this.Handle, "", "");
        base.OnHandleCreated(e);
    }
}

Trotz der Verwendung von Gewohnheiten MenuStrip Kontrolle, wann Application.EnableVisualStyles(); In Main() aufgerufen wird, sieht die Form wie folgt aus (blau):

enter image description here

Irgendwelche Ideen, was das Erscheinungsbild dieses Dropdowns sonst noch beeinflussen könnte?
Was vermisse ich?

Danke.

War es hilfreich?

Lösung

Sie übersehen, dass MenuStrip überhaupt kein natives Windows-Steuerelement ist und daher nicht direkt vom Thema der visuellen Stile betroffen ist.Das gesamte Rendering erfolgt über .NET-Code.Die Basisklasse, die dies tut, ist ToolStripRenderer mit zwei bereitgestellten Implementierungen:ToolStripProfessionalRenderer und ToolStripSystemRenderer.Letzteres versucht, das Aussehen des Betriebssystems zu emulieren. Sie erhalten es, indem Sie den RenderMode des MenuStrip auf „System“ setzen.Die Emulation ist mittelmäßig und auf späteren Betriebssystemen wie Windows 7 völlig falsch.

Wenn Sie das echte Erscheinungsbild des Betriebssystems wünschen, verwenden Sie stattdessen MainMenu.Im Vergleich zu MenuStrip gibt es einige Einschränkungen.Wenn Sie die Farben ändern möchten, können Sie Ihren eigenen Renderer implementieren und dessen Farbtabelle ändern.Wie gezeigt in diese Antwort.

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