如何循环RTB(WPF控件)中的所有“单词”(空格区分单词)以查看哪些是斜体?
感谢
答案 0 :(得分:0)
嗯,你的任务似乎很复杂。
RichTextBox
的内容为FlowDocument
,可在属性Document
找到。反过来,FlowDocument
包含多个Blocks
。
Block
中的每一个都可以是Paragraph
,Section
,Table
等。您需要分别分析每个{。}}。
对于Paragraph
,它由多个Inlines
组成,每个Span
可以是Italic
,而TextPointer
可能是{{3}}。 Italic
表示斜体文本。反过来,Italic
可以包含其他内联,其中包含其他Span
s(例如,Hyperlink
s,您可能想要或可能不想将其包括在您的结果中。
您基本上需要递归遍历所有结构并从Italic
中查看文本。一个特殊情况可能是只有一个部分是斜体的字样,你需要为它们制定策略。
我不知道任何更简单的方法来实现你想要的。 HTH。
编辑:
也许更简单的替代解决方案是从头开始使用{{3}}遍历所有文本(richTextBox.Document.ContentStart
),使用position.GetNextContextPosition(LogicalDirection.Forward)
切换到下一个位置,并测试当前位置是否位于Italic
使用position.Parent
。但是,您应该关心Italic
可以是非直接父母,因此您可能需要向上遍历几个父母。免责声明:我从未在我的代码中尝试过这个想法。
答案 1 :(得分:0)
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类 http://blogs.msdn.com/b/prajakta/archive/2006/11/01/navigate-words-in-richtextbox.aspx