【问题标题】:WPF RichTextBox Control, How To Find All Italicized WordsWPF RichTextBox 控件,如何查找所有斜体字
【发布时间】:2021-11-03 14:49:26
【问题描述】:

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

谢谢

【问题讨论】:

    标签: wpf richtextbox


    【解决方案1】:

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

    RichTextBox 的内容是FlowDocument,可在属性Document 中找到。 FlowDocument 又由几个Blocks 组成。

    每个Blocks 可以是ParagraphSectionTable 等。您需要分别分析它们。

    对于Paragraph,它由几个Inlines组成,每个Span可以是Span,而Italic又可以是ItalicItalic 表示斜体文本。反过来,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)); } }
    【解决方案2】:
    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多