Si può disattivare visivo stili / tematizzazione solo per un singolo controllo di Windows?
-
23-08-2019 - |
Domanda
La mia applicazione Windows Form utilizza la seguente linea standard di codice in modo che gli stili di visualizzazione (tematizzazione) è abilitata per l'intera applicazione ...
Application.EnableVisualStyles();
... che funziona bene, tutti i controlli hanno un aspetto a tema al posto del grigio corazzata piatta che si otterrebbe altrimenti. Ma ho bisogno di disattivare gli stili di visualizzazione solo per una singola istanza di controllo. Non riesco a rimuovere la linea di cui sopra, perché poi avrei perso tematizzazione da tutti i controlli. E 'possibile rimuovere tematizzazione da una singola istanza di controllo?
FYI: Come succede Voglio rimuovere tematizzazione da un'istanza DateTimePicker quindi se la risposta generale non è tranne che per il DateTimePicker allora sarebbe abbastanza buono. Sono felice di poter utilizzare la piattaforma invoke se la soluzione coinvolge giocare con il controllo al livello più basso.
Soluzione
Sembra che è possibile utilizzare SetWindowTheme su un controllo:
[DllImport("uxtheme", ExactSpelling = true, CharSet = CharSet.Unicode)]
public extern static Int32 SetWindowTheme (IntPtr hWnd,
String textSubAppName, String textSubIdList);
yourControl.FlatStyle = FlatStyle.System;
SetWindowTheme(yourControl.Handle, "", "");