Domanda

Sto cercando di impedire che il controllo MenuStrip sia influenzato da stili visivi.

Quindi ho creato una forma semplice con semplice striscia di menu e stili visivi disabilitati in Main():

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

che produce questo aspetto (nota Border Border e Background):

Inserisci Descrizione dell'immagine qui

Ora voglio fare lo stesso nel modo in cui altri controlli di questo modulo sono influenzati da stili visivi (voglio disabilitare gli stili visivi solo per questo a discesa).

Così all'inizio ho provato a disabilitare gli stili visivi per DropDown di ogni ToolStripMenuItem, ma non funzionava. Poi ho provato a disabilitare gli stili visivi per il MenuStrip intero, ma né quello ha funzionato.

Ecco il codice del mio Menustrip personalizzato:

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);
    }
}
.

Nonostante l'utilizzo del controllo personalizzato MenuStrip, quando viene chiamato Application.EnableVisualStyles(); in Main(), l'aspetto della forma sta seguendo (blu):

Inserisci la descrizione dell'immagine qui

Qualche idea che altro potrebbe influire sull'aspetto di questo ascensore?
Cosa mi manca?

Grazie.

È stato utile?

Soluzione

Ti manca che il Menustrip non è affatto un controllo nativo di Windows e quindi non è direttamente influenzato dal tema Stili visivi.Tutte le rendering vengono eseguite da codice .NET.La classe base che fa questo è ToolstripRenderer, con due implementazioni fornite: ToolstripprofessionalRenderer e ToolstripsystemRenderer.Quest'ultimo cerca di emulare il look del sistema operativo, lo si ottiene impostando il redermodo di Menustrip in "Sistema".L'emulazione è così così errata in sistemi operativi successivi come Windows 7.

Se si desidera che il vero sistema operativo look-sentore, usa invece mainmenu.Ha alcune limitazioni rispetto a Menustrip.Se si desidera modificare i colori, puoi implementare il tuo rendering e modificare la sua tabella dei colori.Come mostrato in Questa risposta .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top