内嵌 RichtextBox 编辑

RichtextBox editing inline

我有一组句子。每个句子都是一个新的 运行 对象,位于 richtextbox 的 FlowDocument 的 Inlines 属性 中。 每个句子都有颜色。

        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);

当我这样编辑句子的时候(我把'yes'改成了'y1111111111111es')

我希望得到相同的 运行 对象,但文本从 'yes' 更改为 'y1111111111111es',但我得到了 3 个 运行 对象 'y', '1111111111111111111' 和 'es'

这就是我检索文本的方式

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

有什么方法可以在更改文本

时编辑本机 运行 对象中的文本而不填充新的 运行 对象

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

我从另一个 Whosebug post 那里看到,如果您在段落中使用 TextBlock 而不是 运行s,您可以保留文本并删除 运行s 并防止换行.

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

    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());