C# WPF richtextbox将字符串视为具有相同格式的多次运行

C# WPF richtextbox将字符串视为具有相同格式的多次运行,c#,wpf,richtextbox,C#,Wpf,Richtextbox,我对WPF RichTextBox有问题。我有一个“翻译”应用程序,在源语言的RichTextBox中有一些文本,需要用目标语言文本替换。此外,我还有一个所谓的“格式绘画”功能。这意味着,如果源文本具有特定格式(字体类型、类、样式属性等),富文本框中的文本将以随机颜色高亮显示 然后,翻译人员可以通过选择文本并单击相应的颜色按钮,将此格式应用于目标语言文本。这非常有效,因为当我浏览文本框中的文本时,内容被分割成不同格式的运行 然而,如果译者决定只修改一点单词,例如,原文是“泡泡!”,那么问题就发生

我对WPF RichTextBox有问题。我有一个“翻译”应用程序,在源语言的RichTextBox中有一些文本,需要用目标语言文本替换。此外,我还有一个所谓的“格式绘画”功能。这意味着,如果源文本具有特定格式(字体类型、类、样式属性等),富文本框中的文本将以随机颜色高亮显示

然后,翻译人员可以通过选择文本并单击相应的颜色按钮,将此格式应用于目标语言文本。这非常有效,因为当我浏览文本框中的文本时,内容被分割成不同格式的运行

然而,如果译者决定只修改一点单词,例如,原文是“泡泡!”,那么问题就发生了。译者想把它翻译成“Bulle!”——所以他把光标放在单词的中间,去掉“BB”,加上“L”并按下更新。 在这种情况下,富文本框将这一个单词(我们没有对格式进行任何更改)视为三个独立的内联线—“Bu”、“l”和“les”。因此,这个词被视为三个独立的词

你能建议如何“展平”RTB中的文本,以便在没有高亮度、文本装饰或字体大小/颜色差异的情况下,将文本视为单个内联文本吗

我用于解析文本的代码:

     //the go through all paragraphs
                foreach (Paragraph paragraph in targetFlowDoc.Blocks)
                {
                    foreach (var inline in paragraph.Inlines)
                    {
                        var range = new TextRange(inline.ContentStart, inline.ContentEnd);
                        //get formatting for this fragment
                        Brush brush = (Brush)range.GetPropertyValue(TextElement.BackgroundProperty);
                        ClassAndStyle classAndStyle = TargetPage.GetClassAndStyleForBrush(brush);

                        TextDecorationCollection underline = (TextDecorationCollection)range.GetPropertyValue(Inline.TextDecorationsProperty);


                        //the fragment might contain more words
                        string[] words = range.Text.SplitIntoWords();

    //here, range.Text is split into three (Bu, l and les) which is wrong - I need all text with the same formatting treated as a single range (which I can then split into words)

                        for (int i = 0; i < words.Length; i++)
                        {
                           //stuff happens here to each word, not relevant, all good:)
                        }
//浏览所有段落
foreach(targetFlowDoc.块中的段落)
{
foreach(变量内联在段落内联中)
{
变量范围=新的文本范围(inline.ContentStart、inline.ContentEnd);
//获取此片段的格式
画笔画笔=(画笔)范围.GetPropertyValue(TextElement.BackgroundProperty);
ClassAndStyle ClassAndStyle=TargetPage.GetClassAndStyleForBrush(画笔);
TextDecorationCollection underline=(TextDecorationCollection)range.GetPropertyValue(Inline.TextDecorationProperty);
//片段可能包含更多单词
string[]words=range.Text.SplitIntoWords();
//这里,range.Text被分为三个(Bu、l和les),这是错误的-我需要将所有格式相同的文本作为一个范围处理(然后我可以将其拆分为单词)
for(int i=0;i
谢谢你的帮助