在不使用RichTextBox控件的情况下突出显示文本框中的文本

时间:2012-07-20 07:40:54

标签: wpf textbox richtextbox highlighting

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

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

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

2 个答案:

答案 0 :(得分:2)

这是可能的,但使用RichTextBox要容易得多,所以你可以考虑使用它,而且你不能改变字体大小,只能改变颜色(背景和/或前景)和效果。

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

现在你所拥有的是一个普通的TextBox,其中另外你画了你的文字。从这个起点开始,您可以选择:

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

  • 添加您需要保留基本TextBox文字图纸的高亮显示功能:计算要突出显示的文字的位置,然后绘制正确的背景。

<强>参考
这个(简化的!)算法来自CodeBox2,它最初设计用于扩展TextBox,具有一些类似编辑器的简单功能。

答案 1 :(得分:0)

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

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