Estilo da janela WPF MessageBox

Como aplicar o estilo padrão do Windows ao MessageBox padrão no WPF?

Por exemplo, quando executo o próximo código:

 MessageBox.Show("Hello Stack Overflow!", "Test", MessageBoxButton.OKCancel, MessageBoxImage.Exclamation); 

Estou recebendo checkbox de mensagem:

insira a descrição da imagem aqui

Mas no WinForms está tudo bem com estilo:

 MessageBox.Show("Hello Stack Overflow!", "Test", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation); 

insira a descrição da imagem aqui

De acordo com esta página, o WPF pega os estilos antigos de alguns dos controles.

Para se livrar dele, você deve criar um arquivo app.manifest personalizado (Add -> New item -> Application Manifest File) e colar o seguinte código nele (logo após o / trustInfo – Tag):

       

Então você tem que compilar sua solução com este app.manifest (configure-o nas propriedades do projeto -> Application -> Apontar para o novo manifesto em “Ícones e manifesto”).

Se você iniciar seu aplicativo agora, ele deverá se parecer com o WinForms- MessageBox.

A razão pela qual o WinForms funciona da maneira que ele funciona é porque os estilos visuais estão ativados (isto é, usando Common Controls v6) em sua function Main. Se você remover a chamada para System.Windows.Forms.Application.EnableVisualStyles () , a checkbox de mensagens do WinForms será parecida com a do WPF.

Isso não acontece para um aplicativo WPF, possivelmente porque todos os controles do WPF são processados, portanto, não há necessidade de usar a nova versão dos controles comuns.

Você pode tentar chamar EnableVisualStyles() em algum lugar na boot do seu aplicativo WPF. Não sei se vai funcionar ou não, mas vale a pena tentar. Isso exigirá uma referência a System.Windows.Forms, no entanto.

Além disso, para o WPF, recomendo usar o Kit de ferramentas do WPF estendido que tem uma checkbox de mensagem do WPF

como eu o acionei, “redirecionando” as referências habituais para as formas (elas funcionam da mesma forma, mas são nomeadas diferentemente):

 using MessageBox = System.Windows.Forms.MessageBox; using MessageBoxImage = System.Windows.Forms.MessageBoxIcon; using MessageBoxButton = System.Windows.Forms.MessageBoxButtons; using MessageBoxResult = System.Windows.Forms.DialogResult; namespace ... class ... public MainWindow() { InitializeComponent(); System.Windows.Forms.Application.EnableVisualStyles(); } public void do() { // updated style, but good syntax for a later solution MessageBox.Show("Some Message", "DEBUG", MessageBoxButton.OK, MessageBoxImage.Question); } 

… a solução manifesta não funcionou para mim.