Comment faire en sorte qu’un programme WPF corresponde au thème Windows sélectionné

Je souhaite que mon application WPF s’inspire du thème système sélectionné.

À titre d’illustration, voici une version Windows Forms de ce que j’espère accomplir.

Une fenêtre Winforms de base avec toolstrip et menustrip

Cette fenêtre Windows Form a un menu de base et une bande d’outils avec des thèmes spécifiques. Son apparence changera si l’utilisateur choisit de changer de thème:

même fenêtre, en vert

De plus, il passera au thème aréo lorsqu’il sera exécuté sous Windows 7. J’aimerais faire la même chose dans WPF. Mais je ne suis pas sûr de savoir comment créer une fenêtre WPF stylisée d’après le thème Windows actuel. Cette fenêtre (xaml) comporte également un contrôle menussortingp et toolssortingp, mais ne suit pas complètement le thème Windows sélectionné.

WPF a besoin de quelque chose pour un thème correct

Les contrôles de menu et de barre d’outils ne conservent pas le dégradé trouvé dans les thèmes XP Luna. Notez que contrairement aux autres publications de thème WPF , je n’essaie pas de remplacer le thème Windows sélectionné par l’utilisateur. Cette question semble proche de la mienne, mais je souhaite que toutes les commandes soient associées au thème système sélectionné, sauf si elles sont remplacées. Est-ce que cela doit être fait pour chaque contrôle? Cela peut-il être configuré pour l’ensemble du projet? Cet article MSDN ne couvre que les contrôles personnalisés.

J’apprécierais des exemples spécifiques sur la manière de faire correspondre les contrôles du menu WPF et de la barre d’outils WPF au thème système actuel.

Éditer: Il serait également intéressant de savoir quelle couleur définir pour le menu de telle sorte qu’une bande au thème système apparaisse à côté de l’élément de menu: (à gauche de “Quitter”)

capture d'écran du menu ouvert

(à gauche de “sortie”)

Le problème est que les contrôles WPF sont très différents en interne de ceux de Windows Forms ou de tout autre élément GDI. L’aspect du contrôle WPF est défini à l’aide de différentes classes dans .Net. Le même thème ne peut pas être appliqué comme par magie.

Par conséquent, je dirais – oui, vous devez implémenter la gestion par thème en utilisant les fichiers de ressources dans la réponse à cette question .

Je suppose que nous sums chanceux que MS nous en ait fourni. Une autre chose est que l’existence même de ces styles xaml prouve à quel point le framework WPF est configurable.

Les fichiers de thème xaml se trouvent dans {Program Files} \ Microsoft Expression \ Blend 4 \ SystemThemes \ Wpf \.

La question que vous avez initialement citée contient un exemple de lien entre eux et sa réponse: thème Windows 7 pour WPF?

Pour échanger le thème, vous pouvez append / supprimer dynamicment une entrée de Application.Current.Resources.MergedDictionaries

Vous devrez détecter le thème actuel vous-même.

Une solution consiste à utiliser des couleurs système telles que celles-ci . Ils vont changer en fonction du thème en conséquence. Je ne sais pas s’il existe un moyen plus facile, mais celui-ci est bon =). La liste ci-dessous répertorie les couleurs par thème.