天天看點

Windows Phone自定義控件

為了實作公司需求,不得不自己寫自定義控件。首先第一個需求是密碼掩碼和明碼顯示的切 換。做的時候發現passwordbox沒有切換掩碼和明碼的屬性或方法。那好咱隻好自己動手實作,用一個textbox和passwordbox來分别 實作掩碼和明碼的顯示。直接上效果圖吧。

Windows Phone自定義控件

明碼顯示

Windows Phone自定義控件

掩碼顯示

Windows Phone自定義控件

舊密碼仍舊掩碼顯示,而新編輯的密碼是明碼顯示

第二個控件是下拉重新整理控件。下拉提示下拉可以重新整理,下拉到一定程度提示松開可以重新整理,松開手後顯示正在重新整理。

這樣的控件網上還是有例子的,繼承listbox,使用自己的控件模版來實作一個下拉重新整理清單框。然而做好後發現,公司需求是要可以容納大批量資料的清單,而且還要提供複選框。

這沒關系,有toolkit控件嘛,longlistselector有虛拟化功能,可以加載大約8000條資料而不占用大量記憶體開銷,而且還有選擇狀态,清單項前面有複選框。好吧,咱就繼承longlistselector 控件實作一個下拉重新整理控件。

照同樣的方法寫好了,然而發現資料綁定上去後,竟然顯示不出任何資料。這是為毛啊,為毛啊!斷點調試itemssource資料有綁定上去啊!瞬間淚奔啊!

後來從toolkit的源碼裡面找到longlistselector 的控件模版,發現承載内容的模版是好像是叫viewports的控件。好把咱把控件的模版裡面内容承載的模版換成viewport。再次運作,ok!顯示成功,瞬間内流滿面!上圖

Windows Phone自定義控件
Windows Phone自定義控件

效果出來了,咱試試大批量資料加載,先加個800條看看,有些卡,不過還算正常。

再試試加載1000條資料,瞬間崩潰了,為啥呀,為啥呀!後來發現繼承longlistselector 寫的控件的模版有scrollviewer,這個東西破壞了虛拟化。從longlistselector 的可視化樹中取scrollviewer,壓根沒這東西,隻能取到scrollbar。好吧!這樣寫是不行的,再次淚奔了。

最後絞盡腦筋隻能用控件的mouseenter、mousemove和mouseleave三個事件,加上控件scrollbar的value值來 模拟這樣的效果。總算是能實作同樣的效果,不過效果比繼承的方法略差。好處是,完全不會破壞longlistselector 的虛拟化,一次加載個1000條資料完全顯示正常,不會崩潰。總算能交差了!

繼續閱讀