it-swarm.com.de

WPF-Textblock, Zeilenumbruch im Textattribut

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

<TextBlock Text="line1\nLine2" />

Oder gibt es eine bessere Möglichkeit, einen mittleren Zeilenumbruch innerhalb des Text-Attributs zu erzwingen?

<LineBreak />

Dies funktioniert nicht für mich, es muss der Wert des Text-Attributs sein, da die Textzeichenfolge von einer externen Quelle festgelegt wird.

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

79
ScottCate

Ich weiß, das ist eine alte Frage, aber ich hatte das gleiche Problem. Die Lösung für mich bestand darin, HTML-codierte Zeilenvorschübe (&amp;#10;) zu verwenden.

Line1&amp;#10;Line2

Sieht aus wie

Linie 1
Zeile 2

Weitere HTML-codierte Zeichen finden Sie unter w3schools

108
Noaki

Versuche dies:

<TextBlock>
    line1
    <LineBreak />
    line2
</TextBlock>
113
Paul Alexander

Der einfachste Weg ist

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

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

10
Stephane Halimi
6
jcollum

Wie wäre es, die Zeile in zwei Tags aufzuteilen?

<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 das Folgende wie gezeigt funktionieren:

LineBreak inside a collection

3
user2063329

Die korrekte Verwendung kann folgende sein:

<TextBlock>  
    <Span>text1</Span>  
    <LineBreak/>  
    <Span>text2</Span>  
</TextBlock>
3
radu florescu

Wenn Sie TextBlocks Text binden, funktionieren keine der anderen Antworten. Fügen Sie dem Bindungstext einfach "\ n" an der Stelle hinzu, an der Sie brechen möchten.

2
newman

Ich bin zu spät auf der Party, aber ... das ist mehr oder weniger so, wie ich es getan habe.

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();
    }
}
1
Dan
  <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; - Arbeitet mit allen Steuerelementen von Wpf, Xaml, Silverlight wie TextBlock, HyperlinkText und mehr

1
user1551704

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

z.B.

Mein ist so und es funktioniert gut. Sie haben auch keine Probleme mit der Änderung des Textes.

1
MelloG

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

So habe ich es gemacht : Ich habe den TextBlock subclassed, um die InlineCollection bindbar zu machen, und einen Konverter zwischen dem String und einer InlineCollection (oder eigentlich einer generischen Liste von Inlines) geschrieben.

0
Jodrell

Das funktioniert auch gut:

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