Ignorer les commandes du Ruban
Passer au contenu principal
Blog myTIC - Christophe Peerens > Billets > Windows Phone : Tile

 
Blog myTIC - Christophe Peerens > Billets > Windows Phone : Tile
avril 02
Windows Phone : Tile

Les tiles (tuiles) utilisé dans le windows Phone sont composé the trois éléments :

  • Une image
  • Un text
  • Un compteur

Référencer ces éléments est réalisé via l’objet « ShellTile », via lequel l’on peut rajouter, modifier ou supprimer des « tiles ».

Dans certains cas, il est nécessaire de créer un « tile » contenant des informations dynamiques. Cela se fait en créant une image, de la sauvegarder dans « l’IsolatedStorage » et de la référencer.

Ci-dessous la procédure à suivre.

La première étape est de créé une image de 173 pixels sur 173 pixels (grandeur du « tile »).

 

var wb = new WriteableBitmap(173, 173);

 

Dans cette image, on va « composer » notre nouveau « tile » via un ensemble d’objets graphiques.

Une image de référence reprise des ressources de notre projet par exemple (dans l’exemple, j’utilise l’image du « tile » par défaut). A noter que la propriété « Opacity » me permet d’assombrir l’image afin que le texte ressort plus).

 

BitmapImage img = new BitmapImage();
img.SetSource(Application.GetResourceStream(new Uri("Background.png", UriKind.Relative)).Stream);
var imgbkg = new Image
     {
          Opacity = 0.7,
          Height = 173,
          Width = 173,
          Stretch = Stretch.UniformToFill,
          Source = img
     };
wb.Render(imgbkg, new TranslateTransform());

 

Du texte.

 

var text = new TextBlock
{
     Text = "Hello",
     Foreground = new SolidColorBrush(Colors.White),
     FontFamily = new FontFamily("Segoe WP Black"),
     FontSize = 30
};
wb.Render(text, new TranslateTransform { X = 167 - text.ActualWidth, Y = 6 });

 

Une forme géométrique.

 

var rect = new Rectangle
{
     Width = text.ActualWidth + 4,
     Height = text.ActualHeight + 4,
     Stroke = new SolidColorBrush(Colors.Yellow),
};
wb.Render(rect, new TranslateTransform { X = 165 - text.ActualWidth, Y = 4 });

 

Après avoir “composer” notre image, on force celle-ci à se redessiner.

 

wb.Invalidate();

 

Cette nouvelle image, on DOIT la sauvegarder dans notre IsolatedStorage dans un répertoire spécifique « isostore:/Shared/ShellContent/» (si on la met autre part, cela ne fonctionne pas).

 

using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
{
     if (!isf.DirectoryExists("Shared"))
     {
          isf.CreateDirectory("Shared");
     }
     if (!isf.DirectoryExists("Shared/ShellContent"))
     {
          isf.CreateDirectory("Shared/ShellContent");
     }
     using (IsolatedStorageFileStream fs = isf.CreateFile("/Shared/ShellContent/customtile"))
     {
          wb.SaveJpeg(fs, 173, 173, 0, 80);
     }
}

 

Il ne nous reste plus qu’à modifier notre « tile » pour référencer notre image. Dans l’exemple, je modifie le « tile » principal.

 

Uri isostoreURI = new Uri("isostore:/Shared/ShellContent/customtile", UriKind.Absolute);
ShellTile.ActiveTiles.First().Update(new StandardTileData() { BackgroundImage = isostoreURI, Count=0, Title="" });

Commentaires

Aucun commentaire sur ce billet.