131 votes

Comment mettre une nouvelle ligne dans un contrôle TextBlock de wpf ?

Je récupère du texte à partir d'un fichier XML, et j'aimerais insérer de nouvelles lignes qui sont interprétées par le rendu du bloc de texte comme de nouvelles lignes.

J'ai essayé :

<data>Foo bar baz \n baz bar</data>

Mais les données sont toujours affichées sans la nouvelle ligne. J'ai défini le contenu de <data> par l'intermédiaire de la .Text via C#.

Que dois-je mettre dans le XML pour qu'il rende la nouvelle ligne dans l'interface graphique ?

J'ai essayé quelque chose comme cela en définissant manuellement le texte dans le XAML :

<TextBlock Margin="0 15 0 0" Width="600">
There &#10;
is a new line.
</TextBlock>

Et bien que le caractère encodé n'apparaisse pas dans l'interface graphique, il ne me donne pas non plus une nouvelle ligne.

211voto

H.B. Points 76352

Vous pouvez essayer de placer une nouvelle ligne dans les données :

<data>Foo bar baz 
 baz bar</data>

Si cela ne fonctionne pas, il se peut que vous deviez analyser la chaîne manuellement.

Si vous avez besoin de XAML direct, c'est très facile :

<TextBlock>
    Lorem <LineBreak/>
    Ipsum
</TextBlock>

106voto

bidy Points 126

Pour être complet : Vous pouvez également faire ceci :

 <TextBlock Text="Line1&#x0a;Line 2"/>

x0A est le saut de ligne hexadécimal échappé. L'équivalent de \n

25voto

GameAlchemist Points 7905

Vous devez utiliser

 < SomeObject xml:space="preserve" > once upon a time ...
      this line will be below the first one < /SomeObject>

Ou si vous préférez :

 <SomeObject xml:space="preserve" />  once upon a time... &#10; this line below < / SomeObject>

attention : si vous utilisez &10 ET que vous passez à la ligne suivante dans votre texte, vous aurez DEUX lignes vides.

ici pour plus de détails : http://msdn.microsoft.com/en-us/library/ms788746.aspx

24voto

Gordon Points 211

Vous pouvez également utiliser la liaison

<TextBlock Text="{Binding MyText}"/>

Et définissez MyText comme suit :

Public string MyText
{
    get{return string.Format("My Text \n Your Text");}
}

13voto

Dan Vogel Points 1068

Bien qu'il s'agisse d'une ancienne question, je viens de rencontrer le problème et je l'ai résolu différemment des réponses données. Peut-être que cela pourrait être utile à d'autres.

J'ai remarqué que même si mes fichiers XML ressemblaient à :

<tag>
 <subTag>content with newline.\r\nto display</subTag>
</tag>

Lorsqu'elle a été lue dans mon code C#, la chaîne comportait des doubles barres obliques inverses.

\\r\\n

Pour résoudre ce problème, j'ai écrit un convertisseur de valeur qui supprime la barre oblique inverse supplémentaire.

public class XmlStringConverter : IValueConverter
{
    public object Convert(
        object value,
        Type targetType,
        object parameter,
        CultureInfo culture)
    {
        string valueAsString = value as string;
        if (string.IsNullOrEmpty(valueAsString))
        {
            return value;
        }

        valueAsString = valueAsString.Replace("\\r\\n", "\r\n");
        return valueAsString;
    }

    public object ConvertBack(
        object value,
        Type targetType,
        object parameter,
        CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X