【问题标题】:Highlighting text in a textbox without using RichTextBox control在不使用 RichTextBox 控件的情况下突出显示文本框中的文本
【发布时间】:2012-07-19 11:19:10
【问题描述】:

我有一个 WPF 文本框(不是 RichTextBox),在这个文本框内,我想突出显示搜索结果(例如在 Web 浏览器中)

例如,如果我搜索“abc”,则应突出显示所有出现的“abc”(例如,使用一些红色背景或字体)

我想知道在不使用 RichTextBox 控件的情况下这是否可行,还是真的不行?

【问题讨论】:

    标签: wpf textbox richtextbox highlighting


    【解决方案1】:

    这是可能的,但使用RichTextBox 更容易,因此您可以考虑改用它,而且您不能更改字体大小,只能更改颜色(背景和/或前景)和效果。

    首先,您必须从TextBox 派生您自己的类,因为您将覆盖它的渲染方法。现在覆盖OnRender() 方法,在这里您将使用DrawingContext.DrawText() 方法绘制文本(将所有内容放在FormattedText 对象中,主要您必须调整其属性以使其类似于标准@987654327 @)。

    现在您拥有的是一个普通的TextBox此外您可以在其中绘制文本。从这个起点您可以选择:

    • 完全覆盖TextBox 文字绘图:将TextBox.Foreground 属性设置为Brushes.Transparent。用户将与“真实”文本进行交互,但他会看到您绘制的文本。请注意,要使其正常工作,您必须准确模仿原始 TextBox 中文本的绘制方式(例如,如果您更改字体大小,则它们将不对齐)。

    • 添加您需要的突出显示功能,保持基本TextBox 文本绘制:计算您要突出显示的文本的位置,然后绘制适当的背景。

    参考文献
    这个(简化的!)算法来自CodeBox2,它最初是为了扩展TextBox 而设计的,具有一些简单的类似编辑器的功能。

    【讨论】:

    • 感谢您的回答!我尝试了第一种方法(完全覆盖文本绘图) - 在 TextWrapping 发挥作用之前它工作正常......我不知道如何计算突出显示的文本位置(另一种方法)。
    • @Zsolt 是的,这可能有点棘手,但您可以使用 FormattedText(再次必须完全匹配 TextBox 设置),其中要突出显示的文本具有正确的颜色/背景,而其他所有内容都是透明的。跨度>
    【解决方案2】:

    没有内置功能。此外,TextBox 仅支持整个文本的单一字体样式。

    如果文本应该是只读的,您可以使用流或固定文档并在 Run Elements 中格式化文本。

    【讨论】:

      猜你喜欢
      • 2020-12-24
      • 1970-01-01
      • 1970-01-01
      • 2012-06-26
      • 2011-08-06
      • 2011-01-10
      • 2022-12-31
      • 2016-04-25
      • 1970-01-01
      相关资源
      最近更新 更多