控件我已经弄好了,代码比较多,所以没办法全面介绍。
一开始我是直接继承Selector类来实现,做是做出来了,不过发现性能不太好。于是,我就想着自己来实现。毕竟我是做给自己用的,也不考虑过多的东西,也不像专业控件那样进行复杂封装和样式通用处理。
1、实现在文本框的文本更改时(输入内容)弹出下拉列表,以供选择;
2、下拉列表中的项会根据文本框已输入的内容,显示两种颜色。如果下拉列表中的项的文本里面存在文本框中输入的字符,则显示为另外的颜色;
3、当下拉列表中的项被点击时,就把项中的文本赋值给文本框。
先上几个图,大家看看。
DropdownTextBox类表示带下拉列表的文本框控件,输入框是一个TextBox,放在控件模板中;弹出下拉列表可以使用Popup控件。
DropdownTextBox类的Text属性表示TextBox中的文本,通过属性的双向绑定来实现。DropItems属性用来设置要显示在下拉列表在的项列表。IsDropdownOpened属性指示下拉列表框是否已打开。
当Text属性改变后会引发TextChanged事件。
DropdownItem类表示放在下拉列表框里面的一个项,子控件。模板中放置了一个TextBlock对象,通过该对来实现呈现不同颜色的文本,即使用其Inlines属性。
方法是先把文本框中输入的文本用ToCharArray转为char数组,再分别用数组中的每个char在待选项的文本中查找,如果没找到,即正常颜色(如蓝色),就设置Run元素的前景色为常规颜色;如果找到,说明项中的文本包含输入的字符,就把Run的前景色改为其他颜色(如红色)。最后把所有Run元素都加入到TextBlock的Inlines集合中。
WPF做控件的好处就在于可以把UI单独拿出来设计,控件的UI就可以“拼图”。剩下的工作就是处理代码逻辑了。通常来说,如果只是把控件弄出来自己用的,还比较好办,不虽太严格的思路。如果是专业控件,当然要经过一番痛苦的思考和设计了。
本控件仅供参考,也可能存在许多不足,有兴趣的朋友可以完善完善。
以下是源代码的下载地址:
https://files.cnblogs.com/tcjiaan/dropdownTextBoxApp.zip