Forcer un thème (clair ou sombre) dans son application WP7

Introduction

Parfois, au sein d’une application, le client nécessite une charte graphique très affirmée. Il désire une certaine homogénéité entre toutes les plateformes mobiles (iOS, Android et WP7) et avec son site internet. Windows Phone se base sur 2 thèmes bien différents et on peut comprendre facilement que du texte noir sur un fond gris foncé ne sera pas facilement lisible.

De plus, lors de la certification, Microsoft apporte un soin particulier à ce que chaque application soit bien visible quelque-soit le thème. J’ai déjà eu un retour négatif car un compteur passé blanc dans un coin de mon application. Et il est vrai que je l’avais complètement oublié !

Maintenant, plutôt que de modifier manuellement la propriété Foreground de chaque TextBlock, TextBox et autres ListBox à la main, il existe un moyen relativement simple et rapide de forcer un thème pour notre application.

Tout d’abord, il faut utiliser un fichier de ressource (selon le thème que l’on veut forcer). Ces fichiers ne sont pas de ma création.

Vous pouvez télécharger un fichier ZIP contenant les 2 à cette adresse :ICI

La pratique

Maintenant passons à la partie pratique et l’utilisation de ces thèmes. Sous Visual Studio, dans votre projet créée un dossier nommé « Ressources » (ou le nom que vous désirez ou dans un dossier de ressources déjà existant). Il ne vous reste plus qu’à faire clic droit sur le dossier et ajouter le fichier existant, le thème clair ou le sombre.

Maintenant, rentrons un peu de code dans le fichier App.xaml.cs . Nous allons crée une fonction qui s’occupera de charger/forcer le thème que vous désirez au lancement de l’application.


private void MergeCustomColors()
{
var dictionaries = new ResourceDictionary();
string source = String.Format("/.../Ressources/DarkStyles.xaml"); // A noter ici le chemin vers le fichier de ressource, modifier le.
var themeStyles = new ResourceDictionary { Source = new Uri(source, UriKind.Relative) };
dictionaries.MergedDictionaries.Add(themeStyles);

ResourceDictionary appResources = App.Current.Resources;
foreach (System.Collections.DictionaryEntry entry in dictionaries.MergedDictionaries[0])
{
SolidColorBrush colorBrush = entry.Value as SolidColorBrush;
SolidColorBrush existingBrush = appResources[entry.Key] as SolidColorBrush;
if (existingBrush != null && colorBrush != null)
{
existingBrush.Color = colorBrush.Color;
}
}
}

Le copier/coller à casser tout l’indentage… Cette fonction MergeCustomeColors est à appeler après la fonction  » InitializeComponent(); » toujours dans le App.xaml.cs .

Thème Clair
Thème Clair mais le sombre est forcé

Vous voilà donc avec une application dont le thème correspondra quelque-soit le choix de l’utilisateur à celui que vous voulez !

%d blogueurs aiment cette page :