WPF Textblock, Zeilenumbruch im Textattribut


92

Gibt es eine Möglichkeit \n, einen Zeilenumbruch in einem zu machen TextBlock?

<TextBlock Text="line1\nLine2" />

Oder gibt es eine bessere Möglichkeit, einen Zeilenumbruch innerhalb des TextAttributs zu erzwingen ?

<LineBreak />

Dies funktioniert bei mir nicht, es muss der Wert des TextAttributs sein, da die Textzeichenfolge von einer externen Quelle festgelegt wird.

Ich bin vertraut mit, LineBreakaber es ist nicht die Antwort, die ich suche.


2
In xaml müssen Sie Steuerzeichen <TextBlock Name = "txtBlock" Text = "Line1 & # 10; Line2" /> verwenden. Wenn Sie das Zeichen \ n verwenden möchten, funktioniert es nur mit Code hinter txtBlock.Text = "line1 \ nline2 ";
JJ_Coder4Hire

& # 10; funktioniert gut in xaml. Vielen Dank, dass Sie JJ_Coder4Hire!
Kay Lee

Antworten:


113

Ich weiß, dass dies eine alte Frage wiederbelebt, aber ich hatte das gleiche Problem. Die Lösung für mich war die Verwendung von HTML-codierten Zeilenvorschüben ( &amp;#10;).

Line1&amp;#10;Line2

Sieht aus wie

Linie1
Linie2

Weitere HTML-codierte Zeichen finden Sie in w3schools


18
@Knasterbax Wenn der Text als Inhalt zwischen <TextBlock>und </TextBlock>dann angegeben ist, müssen Sie <LineBreak/>. &#10;arbeitet innerhalb des TextAttributs:<TextBlock Text="..." />
Roman Starkov

6
"& # 10;" arbeitete für mich. Ich brauchte das "& amp;" wie bereits erwähnt. Diese Methode funktioniert auch, wenn der Text wie folgt eingestellt wird: <Setter Property = "Text" Value = "Zeile 1 & # 10; & # 10; Zeile 2" />
EdwardM

123

Versuche dies:

<TextBlock>
    line1
    <LineBreak />
    line2
</TextBlock>

1
Ich habe dies nicht direkt versucht, aber auf Anhieb können Sie xml: space = "bewahren" ausprobieren und dann den Zeilenumbruch direkt in die Text-Eigenschaft einbetten.
Paul Alexander

3
Kapitalisierung Angelegenheiten. Es ist <LineBreak />.
M. Dudley

10

Der einfachste Weg ist

<TextBlock> blabla <LineBreak /> coucou <LineBreak /> coucou 2 </TextBlock>

Sie schreiben also einfach XAML-Code und der <LineBreak />hat genau die gleiche Bedeutung wie
in HTML oder "\ n" in C #.


1
Doppelte Antwort auf Paul Alexanders.
Vapcguy


5

Wie wäre es, wenn Sie die Zeile in zwei Tags aufteilen?

<StackPanel>
    <TextBlock Text="Line1" />
    <TextBlock Text="Line2" />
</StackPanel>

5

<LineBreak /> funktioniert nicht, wenn es sich in einer Sammlung wie Grid oder StackPanel befindet. In solchen Fällen würde Folgendes wie gezeigt funktionieren:

LineBreak in einer Sammlung


Ich habe dies als Inhalt für einen RadioButton versucht. Alles schien gut zu funktionieren, bis ich das Programm unter Windows 7 ausführte. Unter Windows 7 war die Schaltfläche vertikal zwischen den beiden Zeilen zentriert. Windows 10 richtet die Schaltfläche standardmäßig oben aus. Während Windows 10 die VerticalContentAlignment-Eigenschaft berücksichtigen würde, ignoriert Windows 7 sie. Ich musste die LineBreak-Lösung verwenden.
Mrfelis

5

Die richtige Verwendung kann folgende sein:

<TextBlock>  
    <Span>text1</Span>  
    <LineBreak/>  
    <Span>text2</Span>  
</TextBlock>

3

Wenn Sie den Text von TextBlock binden, funktioniert keine der anderen Antworten. Fügen Sie einfach '\ n' zum Bindungstext hinzu, an der Sie brechen möchten.


2
  <HyperlinkButton 
        Content="Apply and restart this pplication!&#10;&#13;Note that modifying these settings requires the application to be restarted."   />

CRLF einfacher Weg = !&#10;&#13;

!&#10;&#13; - Arbeiten Sie an allen Steuerelementen für wpf, xaml und silverlight wie TextBlock, HyperlinkText und mehr


1
(Korrigieren Sie Ihre andere Antwort und markieren Sie sie, damit sie nicht gelöscht wird.)

2

Das funktioniert auch gut:

<TextBlock>
    <Run Text="My nice text"/>
    <LineBreak/>
    <LineBreak/>
    <Run Text="After some linebreaks, I'm back!"/>
</TextBlock>

1

Verwenden Sie einfach das AccessText-Steuerelement. Sie können es wie eine Beschriftung verwenden und haben die Eigenschaft TextWrapping = "WrapWithOverflow"

z.B.

Meins ist so und es funktioniert gut. Außerdem haben Sie keine Probleme, den Text dinamisch zu ändern.


1

Ich bin zu spät zur Party, aber ... so habe ich es mehr oder weniger gemacht (beachten Sie, dass meine ItemSources einfache Zeichenfolgen sind, nicht formatiert, und ich musste nichts "konvertieren").

public class SpaceToLineBreakConverter : IValueConverter
{   
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {            
        return (!String.IsNullOrEmpty(value as string)) 
        ? new Regex(@"\s").Replace(value as string, "\n") 
        : value;            
    }

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

0

Ich hatte ein ähnliches Problem und wollte einen xaml-Markup-String an einen TextBlock binden. Speichern des deklarativen Markups in einem TextBlock in einer Zeichenfolge zur späteren Verwendung.

So habe ich es gemacht : Ich habe den TextBlock in Unterklassen unterteilt, um die InlineCollection bindbar zu machen, und einen Konverter zwischen der Zeichenfolge und einer InlineCollection (oder einer generischen Liste von Inlines) geschrieben.


0

Das &amp;#10;hat bei mir nicht funktioniert, als ich die Bindung verwendet habe. Aber das funktioniert:

$"first line {Environment.NewLine} second line"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.