Aller au contenu

TextBlock

De Banane Atomic

StringFormat

Permet de mettre en forme une chaine de caractères. Présent depuis le Framework .NET 3.5 SP1.

<TextBlock Text="{Binding Path=MaPropriété, StringFormat=Texte {0} texte}" />

<!-- \ et {} servent de caractère d'échappement après le signe = -->
<TextBlock Text="{Binding Path=MaPropriété, StringFormat=\{0\}}" />

<!-- Format d'une date -->
<TextBlock Text="{Binding Path=Date, StringFormat=\{0:d\}}" />
<TextBlock Text="{Binding Path=Date, StringFormat={}{0:dddd MMMM dd}}" />

MultiBinding

Permet de former un string composé de plusieurs Binding.

<TextBlock>
    <TextBlock.Text>
        <MultiBinding StringFormat="Texte {0} texte {1} texte">
            <Binding Path="MaPropriété1" />
            <Binding Path="MaPropriété2" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>
Si le StringFormat commence par { il faut le précéder de {}.
StringFormat="{}{0} - {1}"

Différent styles dans le même TextBlock

<TextBlock>
    <TextBlock.Inlines>
        <Run Text="{Binding Path=Timestamp, StringFormat={}{0} - }" />
        <Run FontWeight="DemiBold" Text="{Binding Path=Message}" />
    </TextBlock.Inlines>
</TextBlock>

Retour à la ligne

<TextBlock Text="Ligne 1 &#10; Ligne 2"</TextBlock>

<TextBlock>Ligne 1<LineBreak />Ligne 2</TextBlock>

Propriétés

Couleur

<TextBlock Foreground="Red" />
tbk.Foreground = new SolidColorBrush(Colors.Red);

TextAlignement

Center, Justify, Left, Right

TextWrapping: retour à la ligne quand le texte déborde

<TextBlock TextWrapping="Wrap"></TextBlock>

TextTrimming: comment couper le texte quand il déborde

None le texte n'est pas coupé, il déborde. Valeur par défaut
CharacterEllipsis le texte est coupé et (...) sont affichés.
WordEllipsis le texte est coupé au dernier mot et (...) sont affichés.
<TextBlock Text="{Binding MyProperty}"
           MaxWidth="600"
           TextTrimming="CharacterEllipsis" />

TextDecorations: souligner

Police / Font

FontFamily Segoe UI par défaut sur Windows 10
FontSize 12 par défaut
FontStretch Normal/Medium par défaut, Condensed, Expanded, ...
FontStyle Normal par défaut, Italic, Oblique
FontWeight Normal par défaut, Bold, Light, ...

Typographie

Sélection du texte

TextBlock ne permet pas de sélectionner du texte. Pour cela, il faut utiliser une TextBox.

<TextBox Background="Transparent"
         BorderThickness="0"
         Text="{Binding MyTextBinding, Mode=OneWay}"
         IsReadOnly="True"
         TextWrapping="Wrap" />

TextBlock vs Label

Label est un Control, il peut donc:

  • avoir un custom control template
  • contenir des données autres qu'un string
  • utiliser un DataTemplate

TextBlock hérite directement de FrameworkElement et n'est donc pas un Control.
Erreur lors de la création de la vignette : /bin/bash: /usr/bin/convert: No such file or directory Error code: 127

  • Label est grisé lorsqu'il est disable
  • Label supporte les access keys
  • TextBlock est plus léger