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

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

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

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

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


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

6.選中點(diǎn)和線的顏色,SelectedColor屬性
設(shè)置該顏色時(shí),需要同時(shí)修改選中的點(diǎn)和線的顏色。

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