不过这样实现的高亮功能有个问题:不能定义高亮(或者低亮)的颜色,不管在代码中还是在XAML中。一种可行的方法是参考ToolTipService定义一大堆附加属性,例如这样:
<TextBox x:Name="FilterElement" ToolTipService.ToolTip="Filter Text" ToolTipService.HorizontalOffset="10" ToolTipService.VerticalOffset="10" TextChanged="OnFilterTextChanged"/>这种方式的缺点是这一大堆附加属性会导致代码变得很复杂,难以维护。ToolTipService还可以创建一个ToolTip类,把这个类设置为附加属性的值:
<TextBox x:Name="FilterElement" TextChanged="OnFilterTextChanged"> <ToolTipService.ToolTip> <ToolTip Content="Filter Text" HorizontalOffset="10" VerticalOffset="10"/> </ToolTipService.ToolTip> </TextBox>这种方式比较容易维护,但有人可能不明白ToolTipService.ToolTip属性的值为什么既可以是文本(或图片等其它内容),又可以是ToolTip类型,XAML如何识别。关于这一点我在下一篇文章会讲解,并且重新实现高亮的功能以支持Style等功能。
也可以参考SearchableTextBlock写一个高亮的文本框,一了百了,但我希望通过这个有趣的功能多介绍几种知识。
6. 参考CollectionViewSource Class (System.Windows.Data) Microsoft Docs
A WPF Searchable TextBlock Control with Highlighting WPF
7. 源码TextBlockService.cs at master