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

时间:2015-05-06 09:27:43

标签: c# wpf richtextbox

我遇到WPF RichTextBox的问题。我有一个'翻译'应用程序在源语言的RichTextBox中有一些文本,需要用目标语言文本替换。另外,我有一个所谓的格式绘画'特征。这意味着,如果源文本具有特定格式(字体类型,类,样式属性等),则富文本框中的文本将以随机颜色突出显示。

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

然而问题是,如果译者决定只修改一些单词 - 例如,源文本是" Bubbles!"。译者希望将其翻译为" Bulles!" - 所以他将光标放在单词的中间,删除' 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:)
                        }

感谢您的帮助!

0 个答案:

没有答案