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 .
Vous voilà donc avec une application dont le thème correspondra quelque-soit le choix de l’utilisateur à celui que vous voulez !
Flurry Analytics : Analyser vos statistiques d’application
Dans cet article, nous n’allons pas voir de code mais juste une présentation de Flurry Analytics que j’utilise au sein de mes applications.

- Flurry Analytics
Le SDK de Flurry pour Windows Phone est disponible en version 2.0.2 et est compatible Mango !
Son utilisation est très simple, on ajoute la DLL et une ligne de code pour gérer les sessions.
Flurry permet aussi de mesurer une activité plus fine en utilisant les events, on peut ainsi déterminer quelle partie de l’application est plus regardée et si des changements sont à effectuer.
Les mesures mettent 24h en général avant de pouvoir être visualisées.
Flurry différencie bien les modèles de téléphones, les réseaux opérateurs et les firmware utilisés.
A noter par contre certaines limitations, comme la localisation géographique qui s’arrêtera aux pays.
On peut voir sur ce screen que mes tests s’effectuent sur un Omnia 7 d’Orange ^^
Je vous recommande donc cet analytics ! De plus, Flurry propose différents SDK pour gérer aussi vos applications iOS, BlackBerry et Android ! Vous retrouverez toutes vos applications en un seul compte, et ainsi comparer sur quelle plateforme votre application perce le mieux !
Gestion du Touch WP7 sous XNA
Je vais reprendre ici un article que j’avais écris pour le Labo .NET de SUPINFO.
Je faisais mes premiers tests Windows Phone sur une application intitulée « Shake My Music ». Le principe était de secouer son téléphone pour charger une musique aléatoirement. Elle est disponible sur le Marketplace pour 99cts ou gratuitement en version d’essai .
Passons à l’article !
_______________________________________
Le nouvel OS mobile de Microsoft, Windows Phone 7, nous permet via l’écran tactile capacitif de gérer plusieurs points d’appuis. Nous allons voir dans cet article comment gérer cet écran au sein d’ XNA 4 et en faire une utilisation basique de détection de position.
Nous allons avoir besoin des logiciels et SDK suivants :
XNA Game Studio 4
Visual Studio 2010 + Windows Phone Tools
Maintenant voyons la marche à suivre pour la gestion du Touch. Tout d’abord, nous devons nous assurer que le Touch est disponible pour « lire » nos entrées dans la boucle Update.
TouchPanelCapabilities touchCap = TouchPanel.GetCapabilities();if (touchCap.IsConnected)
{..}
Et l’on récupère l’état actuel du périphérique.
TouchCollection touches = TouchPanel.GetState();
On obtient donc une collection de « touches » (Points de pression) qui contient pour chaque touche ses coordonnées ainsi que l’état. Concernant ces états, il y a 4 possibilités :
-Invalid : Problème de reconnaissance
-Moved : La position a été mise à jour ou la position ne change pas
-Pressed : Il s’agit d’une nouvelle position
-Released : La position n’existe plus
Passons maintenant à la partie détection d’un appui sur l’écran.
if (touches.Count >= 1)
{
touchposition = (touches[0].Position);
}
Ici, on test si il y a au moins un point de pression de répertorier. Nous utilisons touchposition, qui est un Vector2 pour récupérer les coordonnées X et Y du point de pression. Attention ici il s’agit du point 0, l’écran du Windows Phone 7 peut gérer jusqu’à 4 points de pression. Il faudra donc penser lors du développement à tester les 4 points de pression. Ici à cause de l’émulateur seul le clic de la souris permet de simuler un point de pression. (Le nombre de point de pression possibles peut être vérifié via touchCap.MaximumTouchCount) .
Maintenant que nous avons ce Vector2 touchposition, nous pouvons l’utiliser comme nous voulons et très simplement. Par exemple pour afficher les coordonnées du point de pression.
Dans la boucle Draw, nous allons donc écrire les coordonnées du point de pression.
spriteBatch.Begin();
string positionX = string.Format(« X : {0} », touchposition.X);
spriteBatch.DrawString(font1, positionX,new Vector2(50,380), Color.White);
string positionY = string.Format(« Y : {0} », touchposition.Y);
spriteBatch.DrawString(font1, positionY,new Vector2(50,420), Color.White);
spriteBatch.End();
font1 est un SpriteFont que j’ai ajouté au projet, il correspond à la police Segoe UI Mono. Celle utilisée par défaut par Windows Phone 7.
Faisons un petit résumé du code, commençons par la boucle Update :
TouchPanelCapabilities touchCap = TouchPanel.GetCapabilities();
if (touchCap.IsConnected)
{
TouchCollection touches = TouchPanel.GetState();
if (touches.Count >= 1)
{
touchposition = (touches[0].Position);
}}
Et la boucle Draw pour dessiner notre résultat :
GraphicsDevice.Clear(Color.Black);
spriteBatch.Begin();
string positionX = string.Format(« X : {0} », touchposition.X);
spriteBatch.DrawString(font1, positionX,new Vector2(50,380), Color.White);
string positionY = string.Format(« Y : {0} », touchposition.Y);
spriteBatch.DrawString(font1, positionY,new Vector2(50,420), Color.White);
spriteBatch.End();
Voyons maintenant en image ce que l’on vient de réaliser :
Premier screen : Lancement de l’application, pas d’appui coordonnées = 0
Second screen : Simulation d’un point de pression via un clic souris, mise à jour des coordonnées
Troisième screen : Autre clic, changement des coordonnées
Maintenant c’est à votre tour d’utiliser le Touch. A vos Visual Studio !









