1

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

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

我想知道这是否可能不使用 RichTextBox 控件,或者不是真的?

4

2 回答 2

2

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

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

现在你所拥有的是一个简单的TextBox地方你可以在其中绘制你的文本。从这个起点,您可以选择:

  • 完全覆盖TextBox文字绘图:将TextBox.Foreground属性设置为Brushes.Transparent。用户将与“真实”文本进行交互,但他会看到您绘制的文本。请注意,要使其正常工作,您必须准确模仿原始TextBox.

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

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

于 2012-07-20T07:52:12.237 回答
0

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

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

于 2012-07-20T07:49:21.487 回答