WPF Textblock,Text属性中的换行符


94

有没有办法\n使换行TextBlock

<TextBlock Text="line1\nLine2" />

还是有一种更好的方法可以在Text属性内部强制中线中断?

<LineBreak />

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

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


2
在xaml中,您必须使用控制字符<TextBlock Name =“ txtBlock” Text =“ Line1&#10; Line2” />,如果要使用\ n字符,则只能从txtBlock.Text后面的代码中使用“;
JJ_Coder4Hire

&#10; 在xaml中工作正常。谢谢JJ_Coder4Hire!
凯李

Answers:


114

我知道这正在解决一个老问题,但是我遇到了同样的问题。对我来说,解决方案是使用HTML编码的换行符(&amp;#10;)。

Line1&amp;#10;Line2

好像

1号线
2号线

有关更多HTML编码字符的信息,请访问w3schools


18
@Knasterbax如果将文本指定为之间的内容<TextBlock></TextBlock>那么需要<LineBreak/>&#10;Text属性内工作:<TextBlock Text="..." />
Roman Starkov 2014年

6
“&#10;” 为我工作。我不需要“&amp;” 如前所述。像这样设置文本时,此方法也将起作用:<Setter Property =“ Text” Value =“ Line 1&#10;&#10; Line 2” />
EdwardM

123

试试这个:

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

1
还没有直接尝试过,但是您可以尝试xml:space =“ preserve”,然后将换行符直接嵌入Text属性中。
Paul Alexander

3
资本化问题。这是<LineBreak />。
M. Dudley

10

最简单的方法是

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

因此,您只需编写XAML代码,并且在HTML或C#中的“ \ n” <LineBreak />具有完全相同的含义


1
对保罗·亚历山大的回答重复。
vapcguy



5

<LineBreak />如果在诸如Grid或StackPanel之类的集合中,则不会起作用。在这种情况下,如下所示将起作用:

集合内的LineBreak


我尝试将其作为RadioButton的内容。直到我在Windows 7上运行该程序,一切似乎都可以正常工作。在Windows 7上,该按钮在两行之间垂直居中。Windows 10默认情况下将按钮顶部对齐。尽管Windows 10将使用VerticalContentAlignment属性,但Windows 7会忽略它。我不得不使用LineBreak解决方案。
mrfelis


3

如果要绑定TextBlock的Text,则其他答案均无效。只需在绑定文本中添加“ \ n”到您要中断的位置即可。


2
  <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
(修复其他答案并取消删除它的标志)

2

这也可以正常工作:

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

1

只需使用AccessText控件即可。您可以像使用标签一样使用它,并具有TextWrapping =“ WrapWithOverflow”属性

例如。

我的就是这样,并且工作正常。此外,在动态更改文本上也没有任何问题。


1

我迟到了,但是..或多或少这是我做的事情((请注意,我的ItemSources是纯字符串,未格式化,并且我不需要“ convertBack”任何东西))

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

我遇到类似的问题,想将xaml标记的字符串绑定到TextBlock。本质上,将声明性标记存储在字符串中的TextBlock中,以备后用。

这就是我的工作方式:我将TextBlock子类化以使InlineCollection可绑定,并在字符串和InlineCollection(或实际上是Inlines的常规列表)之间编写了一个Converter。


0

&amp;#10;当我使用绑定时,这对我不起作用。但这有效:

$"first line {Environment.NewLine} second line"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.