【发布时间】:2012-07-19 11:19:10
【问题描述】:
我有一个 WPF 文本框(不是 RichTextBox),在这个文本框内,我想突出显示搜索结果(例如在 Web 浏览器中)
例如,如果我搜索“abc”,则应突出显示所有出现的“abc”(例如,使用一些红色背景或字体)
我想知道在不使用 RichTextBox 控件的情况下这是否可行,还是真的不行?
【问题讨论】:
标签: wpf textbox richtextbox highlighting
我有一个 WPF 文本框(不是 RichTextBox),在这个文本框内,我想突出显示搜索结果(例如在 Web 浏览器中)
例如,如果我搜索“abc”,则应突出显示所有出现的“abc”(例如,使用一些红色背景或字体)
我想知道在不使用 RichTextBox 控件的情况下这是否可行,还是真的不行?
【问题讨论】:
标签: wpf textbox richtextbox highlighting
这是可能的,但使用RichTextBox 更容易,因此您可以考虑改用它,而且您不能更改字体大小,只能更改颜色(背景和/或前景)和效果。
首先,您必须从TextBox 派生您自己的类,因为您将覆盖它的渲染方法。现在覆盖OnRender() 方法,在这里您将使用DrawingContext.DrawText() 方法绘制文本(将所有内容放在FormattedText 对象中,主要您必须调整其属性以使其类似于标准@987654327 @)。
现在您拥有的是一个普通的TextBox,此外您可以在其中绘制文本。从这个起点您可以选择:
完全覆盖TextBox 文字绘图:将TextBox.Foreground 属性设置为Brushes.Transparent。用户将与“真实”文本进行交互,但他会看到您绘制的文本。请注意,要使其正常工作,您必须准确模仿原始 TextBox 中文本的绘制方式(例如,如果您更改字体大小,则它们将不对齐)。
添加您需要的突出显示功能,保持基本TextBox 文本绘制:计算您要突出显示的文本的位置,然后绘制适当的背景。
参考文献
这个(简化的!)算法来自CodeBox2,它最初是为了扩展TextBox 而设计的,具有一些简单的类似编辑器的功能。
【讨论】:
没有内置功能。此外,TextBox 仅支持整个文本的单一字体样式。
如果文本应该是只读的,您可以使用流或固定文档并在 Run Elements 中格式化文本。
【讨论】: