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.

10voto

Adrian Points 449

En cas d'échec, vous pouvez également utiliser

"My text needs a line break here" + System.Environment.NewLine + " This should be a new line"

9voto

alkk Points 291
<TextBlock Margin="4" TextWrapping="Wrap" FontFamily="Verdana" FontSize="12">
        <Run TextDecorations="StrikeThrough"> Run cannot contain inline</Run>
        <Span FontSize="16"> Span can contain Run or Span or whatever 
            <LineBreak />
        <Bold FontSize="22" FontFamily="Times New Roman" >Bold can contains 
            <Italic>Italic</Italic></Bold></Span>
</TextBlock>

2voto

Order23 Points 71

L'utilisation de System.Environment.NewLine est la seule solution qui a fonctionné pour moi. Lorsque j'ai essayé \r\n il se contente de répéter le texte actuel de la \r\n dans la zone de texte.

0voto

Josh Points 69

Insérer un "saut de ligne" ou un "saut de paragraphe" dans une RichTextBox "rtb" comme ceci :

var range = new TextRange(rtb.SelectionStart, rtb.Selection.End); 
range.Start.Paragraph.ContentStart.InsertLineBreak();
range.Start.Paragraph.ContentStart.InsertParagraphBreak();

La seule façon d'obtenir les éléments NewLine est d'insérer du texte avec " \r\n "puis en appliquant d'autres codes qui fonctionnent sur les objets Sélection et/ou TextRange. Cela permet de s'assurer que l'objet \par sont convertis en \line sont sauvegardés comme souhaité et sont toujours corrects lorsque l'on rouvre le fichier *.Rtf. C'est ce que j'ai trouvé jusqu'à présent après de nombreuses tentatives. Mes trois lignes de code doivent être entourées d'un code supplémentaire (avec des boucles) pour définir les éléments TextPointer (.Start .End .ContentStart .ContentEnd) à l'endroit où les lignes et les ruptures doivent être placées, ce que j'ai fait avec succès pour mes besoins.

0voto

jlazz Points 1
        StringBuilder somestext = new StringBuilder();
        somestext.AppendLine("this is some text on line 1");
        somestext.AppendLine(TB_Tag_Linebreak);
        somestext.AppendLine("this is some more text on line 2"); 
        return somestext.ToString();

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