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