【发布时间】:2021-11-03 14:49:26
【问题描述】:
如何遍历 RTB(WPF 控件)中的所有“单词”(空格分隔单词)以查看哪些是斜体的?
谢谢
【问题讨论】:
标签: wpf richtextbox
如何遍历 RTB(WPF 控件)中的所有“单词”(空格分隔单词)以查看哪些是斜体的?
谢谢
【问题讨论】:
标签: wpf richtextbox
嗯,你的任务似乎很复杂。
RichTextBox 的内容是FlowDocument,可在属性Document 中找到。 FlowDocument 又由几个Blocks 组成。
每个Blocks 可以是Paragraph、Section、Table 等。您需要分别分析它们。
对于Paragraph,它由几个Inlines组成,每个Span可以是Span,而Italic又可以是Italic。 Italic 表示斜体文本。反过来,Italic 可以有其他内联,包含其他 Spans(例如,Hyperlinks,您可能希望也可能不希望将其包含在结果中)。
您基本上需要递归遍历所有结构并从Italics 中查看文本。特殊情况可能是只有部分斜体的单词,您需要为它们制定策略。
我不知道有任何更简单的方法可以实现您想要的。 HTH。
编辑:
也许更简单的替代解决方案是使用TextPointer 从头开始遍历所有文本(richTextBox.Document.ContentStart),使用position.GetNextContextPosition(LogicalDirection.Forward) 切换到下一个位置,并使用@987654355 测试您的当前位置是否在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 类来自 Link
【讨论】: