【问题标题】:How can I highlight, not select, text in a data bound WPF TextBox or RichTextBox?如何在数据绑定的 WPF TextBox 或 RichTextBox 中突出显示而不是选择文本?
【发布时间】:2011-09-27 14:30:06
【问题描述】:

一些背景: 我正在尝试突出显示数据绑定 TextBox 或 RichTextBox 中出现的所有搜索文本。

到目前为止我发现了什么: 我想出了如何突出显示 RichTextBox 中的文本:

    <RichTextBox>
        <FlowDocument>
            <Paragraph>
                <Run>In this</Run>
                <Run Background="Yellow">example</Run>
                <Run>the word</Run>
                <Run Background="Yellow">example</Run>
                <Run>is highlighted.</Run>
            </Paragraph>
        </FlowDocument>
    </RichTextBox>

问题: 例如,我怎样才能通过使用一些 IValueConverter 来绑定此 RichTextBox,以便突出显示所有出现的表达式“example”?

【问题讨论】:

  • 你想绑定的属性是什么类型的? FlowDocument 还是字符串?
  • 现在是一个简单的字符串,但我很想看看如何处理非平面文档。

标签: wpf data-binding textbox binding richtextbox


【解决方案1】:
     string example = "example";
     string exampleDoc = "hello, example, hello example.";
     FlowDocument doc =
        new FlowDocument(new Paragraph(new Run("hello, example, hello example.")));
     int pos = 0;
     while (0 <= (pos = exampleDoc.IndexOf(example)))
     {
        new Bold(doc.ContentStart.GetPositionAtOffset(pos),
                 doc.ContentStart.GetPositionAtOffset(pos + example.Length));
     }

这将使您入门。使用要突出显示的单词的 ConverterParameter 将其放在从字符串到 FlowDocument 的 ValueConverter 中很容易。当您添加更多格式时,请注意 TextPointer 的变化,您会看到突出显示向左移动。我相信你会找到在你的情况下处理这个问题的最佳方法。

【讨论】:

  • 谢谢,但是: - 我可以绑定 RichTextBox 的什么属性? - 你的循环坏了 - 我实际更改文本属性的部分是简单的部分 - 我试图“开始”的是如何绑定以在文本上应用转换 - 并返回。跨度>
  • 哦,是的。我忘了,你不能直接做。查看此代码项目示例。它可能会有所帮助。 codeproject.com/KB/WPF/BindableWPFRichTextBox.aspx
猜你喜欢
  • 2017-01-28
  • 1970-01-01
  • 2019-11-18
  • 1970-01-01
  • 2015-12-12
  • 2014-07-19
  • 2018-02-16
  • 2011-08-06
  • 2017-03-18
相关资源
最近更新 更多