WPF MessageBox window style

comment appliquer le style de Windows par défaut à la norme MessageBox dans WPF?

par exemple, quand j'exécute le code suivant:

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

je suis la boîte de message:

enter image description here

mais dans WinForms tout est OK avec le style:

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

enter image description here

34
demandé sur Kyrylo M 2011-03-13 15:27:38

4 réponses

Selon page, WPF reprend les anciens styles pour certains contrôles.

Pour vous en débarrasser, vous devez créer une application personnalisée.fichier manifest (Ajouter -> Nouvel élément -> Fichier de Manifeste d'Application) et de coller le code suivant (à droite après le /trustInfo - Tag ):

<!-- Activate Windows Common Controls v6 usage (XP and Vista): -->
  <dependency>
  <dependentAssembly>
    <assemblyIdentity
      type="win32"
      name="Microsoft.Windows.Common-Controls"
      version="6.0.0.0"
      processorArchitecture="*"
      publicKeyToken="6595b64144ccf1df"
      language="*"
    />
  </dependentAssembly>
</dependency>

Ensuite, vous devez compiler votre solution avec cette application.manifeste (défini dans les propriétés du projet - > Application - > pointer vers le nouveau manifeste dans " icônes et manifester.)"

si vous commencez votre application maintenant, il devrait ressembler à la WinForms-MessageBox.

49
répondu Gimno 2011-08-04 05:03:10

La raison pour laquelle le WinForms fonctionne de la façon dont il fonctionne est parce que les styles visuels sont activés (c.-à-d. en utilisant les contrôles communs v6) dans sa fonction principale. Si vous supprimez l'appel à Système.Windows.Forme.Application.EnableVisualStyles (), alors la boîte de Message WinForms ressemblera à celle du WPF.

cela ne se produit pas pour une application WPF, probablement parce que tous les contrôles WPF sont rendus de sorte qu'il n'est pas nécessaire D'utiliser la nouvelle version de Common Contrôle.

Vous pouvez essayer d'appeler EnableVisualStyles() quelque part dans le démarrage de votre application WPF. Je ne sais pas si il fonctionne ou pas, mais il vaut la peine d'essayer. Cela nécessitera une référence au système.Windows.Les formes, cependant.

6
répondu Andy 2011-03-13 12:44:40

de plus, pour la WPF, je recommande l'utilisation du Trousse élargie du FPF qui a un WPF messagebox

6
répondu gcores 2011-03-13 12:57:47

comme je l'ai déclenché, "rediriger" les références habituelles aux formulaires (ils fonctionnent de la même façon, mais sont nommés différemment):

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 solution manifeste n'a pas fonctionné pour moi.

1
répondu BananaAcid 2017-05-16 22:59:19