WPF RichTextBox控件,如何查找所有斜体字

WPF RichTextBox控件,如何查找所有斜体字,wpf,richtextbox,Wpf,Richtextbox,如何循环RTB(WPF控件)中的所有“单词”(空格删除单词)以查看哪些单词是斜体的 谢谢嗯,你的任务似乎很复杂 RichTextBox的内容是可在属性中找到的。而流程文档又由几个部分组成 每个可以是a、a、a等。您需要分别分析它们 对于段落,它由多个段落组成,每个段落都可以是a,而a又可以是。斜体表示斜体文本。反过来,Italic可以有其他内联线,包含其他Spans(例如,Hyperlinks,您可能希望也可能不希望将其包含在结果中) 您基本上需要递归遍历所有结构,并从Italics中查看文本。

如何循环RTB(WPF控件)中的所有“单词”(空格删除单词)以查看哪些单词是斜体的


谢谢

嗯,你的任务似乎很复杂

RichTextBox
的内容是可在属性中找到的。而
流程文档
又由几个部分组成

每个可以是a、a、a等。您需要分别分析它们

对于
段落
,它由多个段落组成,每个段落都可以是a,而a又可以是。斜体表示斜体文本。反过来,
Italic
可以有其他内联线,包含其他
Span
s(例如,
Hyperlink
s,您可能希望也可能不希望将其包含在结果中)

您基本上需要递归遍历所有结构,并从
Italic
s中查看文本。一个特殊的情况可能是单词中只有一部分是斜体,你需要为它们制定一个策略

我不知道有什么更简单的方法可以实现你想要的。嗯

编辑:
也许更简单的替代解决方案是从一开始就使用(
richTextBox.Document.ContentStart
)遍历所有文本,然后使用
position.GetNextContextPosition(LogicalDirection.Forward)
,切换到下一个位置,并使用
position.Parent
测试当前位置是否在
Italic
中。但是,您应该注意
Italic
可以是非直接父对象,因此您可能需要向上遍历多个父对象。免责声明:我从未在我的代码中尝试过这个想法

TextPointer tp = RTB.Document.ContentStart;
TextRange word = WordBreaker.GetWordRange(tp);

   while (word.End.GetNextInsertionPosition(LogicalDirection.Forward) != null)
        {
            if (word.GetPropertyValue(TextElement.FontStyleProperty).ToString() == "Italic")
            {

            }
            word = WordBreaker.GetWordRange(word.End.GetNextInsertionPosition(LogicalDirection.Forward));  
        }
    }
使用来自的WordBreaker类

我使用了您的基本想法,即检查每个文件是否为斜体或notTextPointer tp=RTB.Document.ContentStart;text范围word=WordBreaker.GetWordRange(tp);while(word.End.GetNextInsertionPosition(LogicalDirection.Forward)!=null){if(word.GetPropertyValue(TextElement.FontStyleProperty.ToString()=“Italic”){}word=WordBreaker.GetWordRange(word.End.GetNextInsertionPosition(LogicalDirection.Forward));}}具有来自的断字器类