WPF 中的 TextBlock,如何在 Text 属性中插入换行符?

109

有没有办法让\nTextBlock中换行?

<TextBlock Text="line1\nLine2" />

是否有更好的方法来强制在Text属性中插入中间换行?

<LineBreak />

对我来说这不起作用,因为文本字符串是从外部来源设置的,所以它需要是Text属性的值。

我熟悉LineBreak,但这不是我要找的答案。


4
在XAML中,如果你想使用控制字符,你必须使用<TextBlock Name="txtBlock" Text="Line1 Line2" />。如果你想使用\n字符,它只能从代码后台工作,如txtBlock.Text = "line1\nline2"。 - JJ_Coder4Hire
在XAML中运行良好。谢谢JJ_Coder4Hire! - Kay Lee
16个回答

135

试试这个:

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

2
我直接没有尝试过,但是从我的经验来看,您可以尝试使用xml:space="preserve",然后直接在Text属性中嵌入换行符。 - Paul Alexander
3
首字母大写很重要。<换行符> - sourcenouveau

123

我知道这是重新激活一个旧问题,但我遇到了同样的问题。对我来说解决方法是使用HTML编码的换行符(&amp;#10;)。

Line1&amp;#10;Line2

看起来像是

第一行
第二行

查看更多 HTML 编码字符,可以访问w3schools


21
如果指定的文本内容位于<TextBlock></TextBlock>之间,那么您需要使用<LineBreak/>。在Text属性中,&#10;也可以起到换行作用,例如<TextBlock Text="..." /> - Roman Starkov
8
" " 对我很有效。虽然没有提到 "&",但我并不需要它。当设置文本时,这种方法也可以起作用:<Setter Property="Text" Value="第一行 第二行" />。 - EdwardM
“外部来源”最好使用Environment.NewLine。 - The incredible Jan

11

最简单的方法是

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

所以,您只需编写XAML代码,<LineBreak /> 的含义与HTML中的
或C#中的 "\n" 完全相同。


3
重复回答 Paul Alexander 的问题。 - vapcguy

8

3
Scott,我不理解你的评论。 - jcollum
1
问题在于<LineBreak/>在Windows XP上无法正常工作。这可能与安装的.NET版本有关。除了视觉元素显示不正确之外,没有任何异常和错误。 - Charles
@Charles 如果问题是 .NET 版本,为什么不安装更新呢?如果可以毫无麻烦地更新它们,我不在乎旧的库。 - The incredible Jan

7

正确使用的方式可能是以下:

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

除了这个回答并没有解决问题之外(来自外部资源),使用 Span 比不使用更“正确”在哪里? - The incredible Jan
@TheincredibleJan,您正在撰写与内容无关的评论。而且您可能忽略了这是2017年的解决方案,而不是2022年的。 - radu florescu

7
如果在诸如Grid或StackPanel之类的集合中,则无法正常工作。 在这种情况下,可以使用以下方法: 在集合中使用LineBreak

我尝试将此内容用作RadioButton的内容。一切似乎都很正常,直到我在Windows 7上运行程序。在Windows 7上,按钮在两条线之间垂直居中。Windows 10默认将按钮与顶部对齐。虽然Windows 10会遵守VerticalContentAlignment属性,但Windows 7会忽略它。我不得不使用LineBreak解决方案。 - mrfelis
@mrfelis,一个按钮怎么可能置于两个文本块之间做为内容呢?你为什么会选择这种解决方案?RadioButton不是集合吧?能否请您展示一下您的代码? - The incredible Jan
@TheincredibleJan 已经过去4年了,所以我没有这个代码。它可能看起来像这样: <RadioButton><StackPanel><TextBlock>Line 1</TextBlock><TextBlock>Line 2</TextBlock><TextBlock>Line 3</TextBlock></StackPanel></RadioButton>。我也没有Windows 7机器进行测试,但我认为在Windows 7上,按钮始终与“Line 2”对齐,而不考虑任何对齐设置。 - mrfelis

7
把这行文本分成两个标签怎么样?
<StackPanel>
    <TextBlock Text="Line1" />
    <TextBlock Text="Line2" />
</StackPanel>

6

对于同一文本块中的多行文本,我使用的最佳方法是:

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

确保不使用TextWrapping =“Wrap”。使用TextWrapping =“NoWrap”或不使用任何内容。


只是一个副本... - The incredible Jan

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

CRLF简单方法 = !&#10;&#13;

!&#10;&#13; - 在所有wpf、xaml、silverlight控件上工作,例如TextBlock、HyperlinkText等等。


1
去修复你的另一个答案并标记它以撤消删除。 - user1228

5

如果您正在绑定TextBlock的文本,其他答案都不起作用。只需在绑定文本中添加'\n',即可在所需断点处换行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接