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个回答

4

当我使用绑定时,&amp;#10;对我无效,但这个有效:

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

4
这也很好用:
<TextBlock>
    <Run Text="My nice text"/>
    <LineBreak/>
    <LineBreak/>
    <Run Text="After some linebreaks, I'm back!"/>
</TextBlock>

3

虽然我来晚了,但是这大致是我的做法(请注意我的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();
    }
}

2

这也能正常工作。

使用这种方法,我们可以按需修改每行的文本属性。

<TextBlock>
    <StackPanel>
        <TextBlock FontSize="12" FontWeight="Bold" >My Text One</TextBlock>
        <TextBlock FontFamily="Times New Roman" FontStyle="Italic">
            - My Text Two
        </TextBlock>
    </StackPanel>
</TextBlock>

外部资源 - The incredible Jan

2

我曾经遇到过类似的问题,想要将一个包含XAML标记的字符串绑定到TextBlock上,即将声明性标记存储在字符串中以备后用。

我是这样做的:我对TextBlock进行了子类化,使InlineCollection可绑定,并编写了一个转换器,用于字符串和InlineCollection(实际上是Inlines的通用列表)之间的转换。


2

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

例如。

我的就是这样,而且它运行良好。此外,您在动态更改文本时不会遇到任何问题。


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