You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RichTextBlock无法显示文本中的多个空格问题求助

问题描述

我尝试在RichTextBlock中展示表格数据,这些数据包含多行带有多个空格的文本,我将每行文本以Run对象的形式添加到Paragraph中,代码如下:

string[] lines = tableData;
Paragraph para = this.TextContent.Blocks.First() as Paragraph;
para.Inlines.Add(new LineBreak());
para.Inlines.Add(new LineBreak());
para.Inlines.Add(new LineBreak());
para.Inlines.Add(new LineBreak());

for (int l = 0; l < lines.Length; l++)
{
    Run r = new Run()
    {
        Text = lines[l],
        FontSize = 9,
    };
    para.Inlines.Add(r);
    para.Inlines.Add(new LineBreak());
}

但RichTextBlock会将多个空格替换为单个空格,实际显示效果与Notepad中显示的原始文本不符。我未找到Paragraph或Run类中可解决该问题的属性,请问如何让RichTextBlock实现Notepad中的预期显示效果?

解决方案

RichTextBlock默认会合并连续空格,要保留原始空格格式,有两种可行方案:

方案一:使用Span替代Run,设置XmlSpace="preserve"

把原来的Run换成Span,通过XmlSpace属性强制保留文本中的所有空格、换行格式,和纯文本编辑器表现一致。修改后的循环代码如下:

for (int l = 0; l < lines.Length; l++)
{
    Span span = new Span()
    {
        XmlSpace = XmlSpace.Preserve,
        FontSize = 9
    };
    span.Inlines.Add(new Run { Text = lines[l] });
    para.Inlines.Add(span);
    para.Inlines.Add(new LineBreak());
}

方案二:将普通空格替换为非断行空格(\u00A0)

如果不想修改控件类型,可把文本中的普通空格替换为非断行空格,这种空格不会被RichTextBlock合并:

Run r = new Run()
{
    Text = lines[l].Replace(" ", "\u00A0"),
    FontSize = 9,
};

注意:该方式会替换所有空格,若文本存在自动换行需求,可能影响换行逻辑,更适合纯固定格式的表格数据。

额外提示

如果表格数据有严格列对齐需求,也可以用FixedPage配合多个TextBlock模拟表格,或直接使用DataGrid控件,这类控件对固定格式文本的支持更友好。

内容的提问来源于stack exchange,提问作者Krishna Katamneni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 18:01:18