Stile della finestra MessageBox WPF

Come applicare lo stile Windows predefinito al MessageBox standard in WPF?

Ad esempio, quando eseguo il codice successivo:

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

Sto ricevendo la finestra del messaggio:

inserisci la descrizione dell'immagine qui

Ma in WinForms tutto è OK con stile:

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

inserisci la descrizione dell'immagine qui

Secondo questa pagina, WPF riprende i vecchi stili per alcuni dei controlli.

Per liberarsene, devi creare un file app.manifest personalizzato (Aggiungi -> Nuovo elemento -> File manifest di applicazione) e incollare il seguente codice (subito dopo / trustInfo – Tag):

       

Quindi devi compilare la tua soluzione con questo app.manifest (impostalo nelle proprietà del progetto -> Applicazione -> Seleziona il nuovo manifest in “Icone e manifest”).

Se avvii la tua applicazione ora dovrebbe assomigliare al WinForms-MessageBox.

Il motivo per cui il metodo WinForms funziona è perché gli stili visivi sono triggersti ​​(cioè utilizzando Common Control v6) nella sua funzione principale. Se si rimuove la chiamata a System.Windows.Forms.Application.EnableVisualStyles () , la finestra di messaggio di WinForms sarà simile a quella di WPF.

Ciò non accade per un’app WPF, probabilmente perché tutti i controlli WPF sono resi così non è necessario utilizzare la nuova versione di Common Controls.

Potresti provare a chiamare EnableVisualStyles() da qualche parte all’avvio della tua applicazione WPF. Non so se funzionerà o no, ma vale la pena provare. Ciò richiederà comunque un riferimento a System.Windows.Forms.

Inoltre, per WPF consiglierei di usare il Toolkit WPF esteso che ha una messagebox WPF

come l’ho triggersto, “reindirizzando” i soliti riferimenti a quelli Form (funzionano allo stesso modo, ma hanno un nome diverso):

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

… la soluzione manifest non ha funzionato per me.