富文本框内联编辑
本文关键字:编辑 文本 | 更新日期: 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());