WPF實現(xiàn)手勢解鎖
桌面程序的解鎖方式一般是賬號密碼,互聯(lián)網(wǎng)的可以使用掃碼解鎖,甚至人臉識別。但掃碼需要網(wǎng)絡,人臉識別又較復雜。所以就想把安卓常用的手勢解鎖移植到桌面程序上。
先來張效果圖,有興趣的往下看,沒興趣的打擾了。

WPF手勢解鎖使用鼠標點擊事件,鼠標移動事件,鼠標彈起事件實現(xiàn)。自定義了三個屬性(初始化顏色,選中顏色,選中點的集合),一個事件(繪制完成后觸發(fā)的事件)。
實現(xiàn)的功能:
繪制過程中直線隨鼠標移動的效果
繪制兩個連接點的連線
繪制完成后可調(diào)用的事件
實現(xiàn)初始化顏色,選中顏色,選擇連接點依賴屬性
源碼主要說明:
1.構(gòu)造函數(shù),完成事件注冊

2.窗體加載事件
繪制九宮格,tag用動態(tài)類型保存了實際位置(Point)和序號(Loaction)

3.鼠標左鍵點擊事件
3.1清空了除九宮格之外所有元素
3.2判斷點擊位置是否是圓點位置,如果不是則不處理,否則記錄當前位置用于畫線,一條是跟蹤鼠標的線(currentLine),另一個是為了顯示選中的圓點的連線,此處記錄繪制線的第一個點(currentEllipse與后續(xù)經(jīng)過的點的連線).

4.鼠標移動事件
4.1繪制跟隨鼠標的線
4.2判斷是否經(jīng)過之前沒經(jīng)過的圓點,繪線過程中,一個點只能用一次。經(jīng)過的點保存在ellipseList集合中。
4.3如果經(jīng)過未曾經(jīng)過的點,則與上個經(jīng)過的點繪制直線,并且重新賦值當前點currentEllipse,重新定義跟隨鼠標的線(currentLine)的起始點為該點。
4.4把點添加到Points集合中


5.鼠標左鍵彈起事件
5.1鼠標彈起時,修改所有經(jīng)過的點以及點之間的連線顏色。
5.2清空所有使用的臨時的變量,currentEllipse,currentLine
5.3觸發(fā)繪制后觸發(fā)的事件(AfterDraw)

6.選中點和線的顏色,SelectedColor屬性
設置該顏色時,需要同時修改選中的點和線的顏色。

7.繪制用的點的集合Points
綁定Points屬性,后臺就可以獲取到繪制圖案經(jīng)歷的點的集合。
8.其他代碼
其他包含初始顏色,繪制完成以后觸發(fā)的事件,以及使用到的變量。見源碼。
9.利用該控件實現(xiàn)解鎖
9.1綁定三個屬性一個事件,分別是初始化顏色(Color),選中的顏色(SelectedColor),經(jīng)過的點(Points)
9.2SelectedColor綁定方式
需要一個轉(zhuǎn)換器(驗證正確與否與顏色的轉(zhuǎn)換),如果驗證正確,則顯示綠色,否則顯示紅色。
9.3如果連接的點太少時,則需進行提示,并且恢復原來的狀態(tài)(即把選中的顏色設置為初始化的顏色)
參考:https://www.cnblogs.com/ShenNan/p/5587009.html
源碼:沒找到上傳附件,附上碼云地址。
https://gitee.com/yiyecao/temporary-components
本文轉(zhuǎn)載自博客園:https://www.cnblogs.com/yiyecao/p/13627233.html