控件我已經弄好了,代碼比較多,所以沒辦法全面介紹。
一開始我是直接繼承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