5

[WPF]带下拉列表的文本框

 3 years ago
source link: https://www.cnblogs.com/tcjiaan/p/3550893.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

[WPF]带下拉列表的文本框

控件我已经弄好了,代码比较多,所以没办法全面介绍。

一开始我是直接继承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就可以“拼图”。剩下的工作就是处理代码逻辑了。通常来说,如果只是把控件弄出来自己用的,还比较好办,不虽太严格的思路。如果是专业控件,当然要经过一番痛苦的思考和设计了。

本控件仅供参考,也可能存在许多不足,有兴趣的朋友可以完善完善。

以下是源代码的下载地址:

 http://files.cnblogs.com/tcjiaan/dropdownTextBoxApp.zip


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK