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.

ScottCate
quelle
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

Noaki
quelle
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>
Paul Alexander
quelle
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 #.

Stephane Halimi
quelle
1
Doppelte Antwort auf Paul Alexanders.
Vapcguy
7

<LineBreak/>

http://www.longhorncorner.com/UploadFile/mahesh/XamlLineBreak06092005152257PM/XamlLineBreak.aspx

jcollum
quelle
3
Scott Ich verstehe deinen Kommentar nicht.
JCollum
1
Das Problem ist, dass <LineBreak /> unter Windows XP nicht funktioniert. Möglicherweise hat dies auch etwas mit der installierten .NET-Version zu tun. Es gibt keine Ausnahmen und keine anderen Fehler als die visuellen Elemente werden nicht korrekt angezeigt.
Charles
5

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

<StackPanel>
    <TextBlock Text="Line1" />
    <TextBlock Text="Line2" />
</StackPanel>
Cameron MacFarland
quelle
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

user2063329
quelle
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>
radu florescu
quelle
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.

neuer Mann
quelle
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

user1551704
quelle
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>
Christoffer Eriksson
quelle
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.

MelloG
quelle
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();
    }
}
Dan
quelle
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.

Jodrell
quelle
0

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

$"first line {Environment.NewLine} second line"
Blechdose
quelle