Comment supprimer le verso d'une tuile

Comment supprimer le verso d'une tuile

Introduction

Sous mango, il est très facile de créer une tuile ayant deux faces avec au recto : 

  • un titre
  • un compteur
  • un fond
et au verso
  • un titre
  • un texte
  • un fond
Voici un exemple montrant comment on créé une tuile :
var newtile = new StandardTileData()
{
Title = "Fuse",
Count = 2,
BackgroundImage = uriBackground,
BackTitle ="engadget",
BackContent="resumé de l'article",
BackBackgroundImage= uriBackground2
};
ShellTile.Create(new Uri("/MainPage.xaml?id=" + Id, UriKind.Relative), newtile);
Pour plus d’informations, lire l’article précédent.
Que l’on souhaite mettre à jour ou supprimer une tuile, la principale difficulté est de retrouver la bonne tuile. Pour cela, le seul moyen est d’analyser la propriété NavigationUri  et d’en déduire le rôle de cette tuile. Lire l’article précédent pour plus d’information.
var shell = ShellTile.ActiveTiles.FirstOrDefault((s) => s.NavigationUri.OriginalString == "/MainPage.xaml?id=" + Id);

if(shell!=null)
{
shell.Update(...);
}

Suppression du verso

Si nous récupérons une tuile ayant déjà un verso et que l’on exécute le code suivant :


var newtile= new StandardTileData()
{
Title = "Fuse update",
Count = 12,
BackgroundImage = new Uri("img/CC.jpg", UriKind.Relative)
};

shell.Update(newtile);

On pourrait imaginer que la tuile n’ait plus qu’une seule face, mais malheureusement ce n’est pas le cas, elle continue à afficher régulièrement l’arrière de la tuile comme auparavant.

Pourquoi ?

En fait, il ne faut pas imaginer StandardTileData comme un objet, mais plutôt comme un structure de données représentant les données à modifier, et la fonction Update ne sort pas à remplacer la tuile, mais à la mettre à jour. Ainsi, la fonction Update en réalité, regarde toutes les propriétés de l’object StandardTileDate et si leur valeur n’est pas null, alors il demande une mise à jour de la tuile.

Dans notre exemple précédent, on n’a pas donné de valeurs aux propriétés BackTitle, BackContent et BackBackground, la fonction update va donc les ignorer et va garder les anciennes valeurs. C’est donc pour cela que la tuile continue à afficher l’ancien verso.

Solution

Pour supprimer le verso, il faut donc dire à la tuile que les trois propriétés représentant le verso soit réinitialisé.

Pour BackContent et BackTitle, représenté par des strings, il suffit de leurs affecter la valeur String.Empty. Attention, leurs affecter la valeur null, ne fera rien et gardera l’ancienne valeur.

Pour le BackBackground, de type Uri, cela se complique un peu. Comme pour les deux propriétés précédentes, la mettre à null ne fera rien, mais pour autant il n’existe pas de constante Uri.Empty comme pour les strings.

Si on écrit :


new Uri(null);

Le programme  va lancer une exception de type ArgumentNullException, de même :


new Uri(String.Empty);

va lancer une exception de type UriFormatException.

En fait, il ne va pas arriver à savoir si l’uri est relative ou absolue et sera donc perdu. Il suffit donc de lui préciser que l’uri est de type absolu pour que tout fonctionne !

Par conséquent, pour supprimer le verso d’une tuile, il suffit d’écrire :

var newtile = new StandardTileData()
{
Title = "Fuse",
Count = 2,
BackgroundImage = uriBackground,
BackTitle =String.Empty,
BackContent=String.Empty,
BackBackgroundImage= new Uri(String.Empty,UriKind.Relative)
};
shell.Update(newtile);

Bon dev !
Comments are closed.