RichTextBlock在循环中添加新块

本文关键字:添加 新块 循环 RichTextBlock | 更新日期: 2023-09-27 17:58:19

我想在RichTextBlock中添加一个新的普通Run,如果单词不匹配,如果匹配,文本应该是粗体:

if (InnerTextofCell == "TEXT")
{
   rtb2.Blocks.Add(new Paragraph (new Run { FontWeight = FontWeights.Bold, Text = innerTextOfCell }));
}
else
{
   rtb2.Blocks.Add(new Paragraph (new Run { Text = innerTextOfCell }));
}

我唯一的问题是,Paragraph没有一个包含1个参数的构造函数。

有人有解决方案吗?而且它在foreach循环中,所以它经常重复。

RichTextBlock在循环中添加新块

如果查看一个Paragraph对象,您会注意到Inlines属性(向其中添加运行)是只读的。所以你不能在构造函数中添加这些。一种可能的解决方案如下:

var paragraph = new Paragraph();
var run = new Run { Text = innerTextOfCell };
if (InnerTextofCell == "TEXT")
{
    run.FontWeight = FontWeights.Bold;
}
paragraph.Inlines.Add(run);
rtb2.Blocks.Add(paragraph);

创建ParagraphRun对象,检查文本是否必须为粗体,然后将它们添加到RichTextBlock中。

由于您谈论的是foreach循环,因此您甚至可以根据所追求的设计(单行上的文本或堆叠在多行上的文本)重用Paragraph对象。您的代码将类似于:

var paragraph = new Paragraph();
foreach(...)
{
    var run = new Run { Text = innerTextOfCell };
    if (InnerTextofCell == "TEXT")
    {
        run.FontWeight = FontWeights.Bold;
    }
}
paragraph.Inlines.Add(run);
rtb2.Blocks.Add(paragraph);

我认为你可以简单地这样做来解决你的问题:

if (InnerTextofCell == "TEXT")
{
   rtb2.Blocks.Add(new Paragraph (new Run { FontWeight = FontWeights.Bold, Text = innerTextOfCell }));
}
else
{
   rtb2.Blocks.Add(new Paragraph (new Run { FontWeight = FontWeights.Normal, Text = innerTextOfCell }));
}