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