Usando setWindowTheMe () nos controles no WindowsFormShost no WPF?
-
21-09-2019 - |
Pergunta
Tenho um aplicativo que estou desenvolvendo que reflete de perto o estágio de dispositivo do Windows 7. No estágio do dispositivo, abaixo do banner principal, há uma ListView contendo ações incorporadas como ListViewItems.
No meu aplicativo WPF, usei o WindowsFormShost para hospedar um WinForms ListView para que eu pudesse usar SetWindowTheme()
nele e aplique o estilo Windows Vista/7.
Isso, no entanto, não funciona e não atinge o mesmo efeito que faz quando usado nos formulários do Windows.
Como posso alcançar a aparência do Windows 7 em uma ListView no WPF? Não estou procurando criar um estilo personalizado, então aplicá -lo, porque, francamente, é uma dor demais na bunda para continuar usando o WPF para este aplicativo.
Obrigado! :)
Solução
Basta adicionar as seguintes linhas:
[DllImport("uxtheme.dll", CharSet = CharSet.Unicode)]
public static extern int SetWindowTheme(IntPtr hWnd, String pszSubAppName, String pszSubIdList);
.ctor
{
System.Windows.Forms.Integration.WindowsFormsHost.EnableWindowsFormsInterop();
System.Windows.Forms.Application.EnableVisualStyles();
SetWindowTheme(MyControl.Handle, "Explorer", null);
}
Outras dicas
Aparentemente, depois de cavar, a única resposta parece estar criando um controle personalizado no WPF.