Dot.Blog

C#, XAML, Xamarin, UWP/Android/iOS

Silverlight Astuce : sauts de ligne dans un “Content”

[new:20/03/2011]Une astuce très courte pour aujourd’hui : Comment insérer un saut de ligne lorsqu’on fixe la valeur d’une propriété Content en Xaml (étant entendu qu’on désire placer un texte et non d’autres objets) ?

Des propriétés Content il y a beaucoup sous Silverlight. Un bouton, un CheckBox, sont autant d’exemples de classes offrant un “Content”, généralement de type ContentPresenter (ou dérivé). L’avantage de ces champs est de pouvoir recevoir n’importe quel contenu. Par défaut on peut y placer un simple texte, sans même avoir à créer un objet TextBlock.

L’utilisation de chaines pour le contenu des classes indiquées est très fréquent. C’est pour cela que tout le comportement a d’ailleurs été optimisé pour rendre simple cette utilisation (rien à faire d’autre que de taper le texte) sans perdre la possibilité de placer un contenu complexe (une image, un contrôle, toute une arborescence visuelle ...).

Mais tout aussi fréquemment on aimerait bien pouvoir insérer un saut de ligne dans le texte tapé. Ce que l’éditeur de Blend ou de VS ne supportent pas (le Return valide la saisie). Quant à tenter un “\n” dans la chaine, cela ne marche pas, pas plus qu’une balise <LineBreak/> car nous ne sommes pas dans le Run d’un TextBlock.

Il existe pourtant une solution simple. le “\n” n’est pas si loin... encore faut-il saisir directement le caractère spécial en hexadécimal et l’insérer comme tout caractère de ce type en respectant la syntaxe XML.

Ainsi, pour couper en deux lignes le Content d’un CheckBox (son libellé donc) on écrira :

<CheckBox Content="Accès à tous les flux&#xa;et tous les clients" Margin... /> 

ce qui donnera un affichage de ce type :

image

Le secret réside donc dans le caractère #xa; c’est à dire le code hexadécimal A, soit le décimal 10, donc le caractère Line Feed ASCII, signifiant Saut de Ligne... Vous remarquerez au passage que c’est exactement la signification de “\n” en C# (ASCII 10), le “\r” valant pour le retour charriot (ASCII 13) inutile dans le cas présent.

Conclusion

Ce n’est vraiment pas très savant comme astuce, mais je sais qu’elle rendra service. Profitez-en, c’est Dot.Blog, c’est sympa et c’est gratuit (et sans pub) !

Stay Tuned !

blog comments powered by Disqus