[WPF自定义控件库]排序、筛选以及高亮 (2)

不过这样实现的高亮功能有个问题:不能定义高亮(或者低亮)的颜色,不管在代码中还是在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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpxgpd.html