C# WPF richtextbox将字符串视为具有相同格式的多次运行
我对WPF RichTextBox有问题。我有一个“翻译”应用程序,在源语言的RichTextBox中有一些文本,需要用目标语言文本替换。此外,我还有一个所谓的“格式绘画”功能。这意味着,如果源文本具有特定格式(字体类型、类、样式属性等),富文本框中的文本将以随机颜色高亮显示 然后,翻译人员可以通过选择文本并单击相应的颜色按钮,将此格式应用于目标语言文本。这非常有效,因为当我浏览文本框中的文本时,内容被分割成不同格式的运行 然而,如果译者决定只修改一点单词,例如,原文是“泡泡!”,那么问题就发生了。译者想把它翻译成“Bulle!”——所以他把光标放在单词的中间,去掉“BB”,加上“L”并按下更新。 在这种情况下,富文本框将这一个单词(我们没有对格式进行任何更改)视为三个独立的内联线—“Bu”、“l”和“les”。因此,这个词被视为三个独立的词 你能建议如何“展平”RTB中的文本,以便在没有高亮度、文本装饰或字体大小/颜色差异的情况下,将文本视为单个内联文本吗 我用于解析文本的代码:C# WPF richtextbox将字符串视为具有相同格式的多次运行,c#,wpf,richtextbox,C#,Wpf,Richtextbox,我对WPF RichTextBox有问题。我有一个“翻译”应用程序,在源语言的RichTextBox中有一些文本,需要用目标语言文本替换。此外,我还有一个所谓的“格式绘画”功能。这意味着,如果源文本具有特定格式(字体类型、类、样式属性等),富文本框中的文本将以随机颜色高亮显示 然后,翻译人员可以通过选择文本并单击相应的颜色按钮,将此格式应用于目标语言文本。这非常有效,因为当我浏览文本框中的文本时,内容被分割成不同格式的运行 然而,如果译者决定只修改一点单词,例如,原文是“泡泡!”,那么问题就发生
//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
谢谢你的帮助