富文本框内联编辑

本文关键字:编辑 文本 | 更新日期: 2023-09-27 18:35:19

我有一个句子数组。每个句子都是richtextbox的FlowDocument的Inline属性中的一个新Run对象。每个句子都有颜色。

        var paragraph = new Paragraph(); 
        foreach (var sentence in Sentences)
        {
            ....
            paragraph.Inlines.Add(new Run { Text = sentence, Background = new SolidColorBrush(color) });
        }
        tbText.Document.Blocks.Add(paragraph);

当我像这样编辑句子时(我将"是"更改为"y1111111111111es")

我希望得到相同的 Run 对象,并将文本从"是"更改为"y111111111111es",但我得到了 3 个带有"y"、"1111111111111111111"和"es"的运行对象

这就是我检索文本的方式

        foreach (Paragraph paragraph in tbText.Document.Blocks)
        {
            foreach (Run inline in paragraph.Inlines)
            {
                editedTextes.Add(inline.Text);
            }
        }

当我更改文本时,有没有办法在不填充新的 Run 对象的情况下编辑本机 Run 对象中的文本

富文本框内联编辑

似乎 FlowDocument 动态添加运行以鼓励按设计包装。

我从另一个堆栈溢出帖子中看到,如果您使用 TextBlock 而不是段落内部的运行,您可以保留文本并删除运行并防止换行。

在你的第二个块中试试这个:

    foreach (Paragraph paragraph in tbText.Document.Blocks)
    {
        var sb = new StringBuilder();
        foreach (Run inline in paragraph.Inlines)
        {
            sb.Append(inline.Text);
        }
        editedTextes.Add(new TextBlock()
        {
           Text = sb.ToString(),
           TextWrapping = TextWrapping.NoWrap
        });
    }

或者,如果您不喜欢 TextBlocks,只需在构建字符串后添加一次运行:

    editedTextes.Add(sb.ToString());