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

时间:2010-10-31 11:20:39

标签: wpf richtextbox

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

感谢

2 个答案:

答案 0 :(得分:0)

嗯,你的任务似乎很复杂。

RichTextBox的内容为FlowDocument,可在属性Document找到。反过来,FlowDocument包含多个Blocks

Block中的每一个都可以是ParagraphSectionTable等。您需要分别分析每个{。}}。

对于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