[WinRT] Garder les espaces à la fin des textblocks

[WinRT] Garder les espaces à la fin des textblocks

Exceptionnellement je vais parler de Windows 8.

Voilà donc la problématique : contrairement à Silverlight et à WPF, lorsque l’on souhaite afficher un textblock terminant par des espaces, ces derniers sont tout simplement ignorés par le système.

Par exemple si on écrit le code suivant :


<StackPanel  Orientation="Horizontal">
<TextBlock Text="My name is " />
<TextBlock Text="Rudy" />
</StackPanel>

affichera sous Windows Phone (Silverlight 4) :

alors que le même code en WinRT sous Windows 8 affichera :

Un peu gênant ?

Pourquoi ne pas utiliser de Run ?

En effet, on pourrait écrire :


<TextBlock>

<Run Text="My name is : "/>

<Run Text="Rudy"/>

</TextBlock>

Mais pour une multitude de raison, on pourrait ne pas pouvoir utiliser de Run, comme par exemple si le deuxième élément n’est pas un texte ou un élément plus complexe, ou s’il on a besoin d’animer une des deux parties par exemple..

Solution ?

Une solution qui semble évidente au premier abord est d’utiliser &nbsp; bien connu des développeurs HTML, toutefois ne fonctionne pas, XAML ne connaissant pas ce mot clé html.

Seconde chance : tentons avec le code hexadécimal d’un espace soit 32 : &#32;

Résultat :

 

Bon ok, mauvaise pioche…

Même si &nbsp; n’existe qu’en html, il nous donne un bon indice pour savoir où chercher. Voyons ce que signifie nbsp pour commencer : non breaking space ou en français : “espace insécable”.

Quel est la différence entre un espace et un espace insécable ?

En fait un espace insécable est comme un espace classique à la différence près qu’il permet d’indiquer à un traitement de texte par exemple que l’on souhaite pas sauter une ligne au niveau de cet espace. Afin de ne pas avoir ce genre de résultat :

Bonjour David, comment vont tes lapins aujourd’hui
? Au fait j’ai fait un super score à World of Monger : 113

210 points !

En français par exemple, il est fortement conseillé d’utiliser un espace insécable entre le dernier mot d’une phrase et un point d’interrogation ou d’exclamation afin que ces derniers ne soient pas affiché à la ligne suivante ou encore lorsqu’on utilise un espace comme séparateur de groupes de 3 chiffres dans les nombres supérieurs au millier (ou encore dans les numéros de téléphone, etc…)

Sous windows, il est possible de l’écrire en utilisant la combinaison de touches : alt + 0160. Si toutefois vous ne pouvez saisir ce genre de combinaison (pas facile avec un clavier virtuel par exemple…) vous pouvez juste écrire &#0160; dans le xaml.

Exemple :


<StackPanel  Orientation="Horizontal">
<TextBlock Text="My name is&0160;" />
<TextBlock Text="Rudy" />
</StackPanel>

Donnera bien :

 

Ce qui est exactement ce que l’on souhaitait !

 

 

 

 

THE END

Comments are closed.