主要有以下幾種事件: 主要事件 子事件 觸發條件 MouseHover 滑鼠懸停在控件發生 MouseLeave 滑鼠離開控件時發生 EventHandler MouseEnter 滑鼠進入控件時發生 EventHandler MouseMove 滑鼠移動過程中重複發生 MouseEventHandler MouseDown 滑鼠鍵按下時發生 MouseEventHandler MouseLeftButtonDown 滑鼠左鍵按下時發生 Mou
主要有以下幾種事件:
主要事件 | 子事件 | 觸發條件 |
MouseHover | 滑鼠懸停在控件發生 | |
MouseLeave | 滑鼠離開控件時發生 | EventHandler |
MouseEnter | 滑鼠進入控件時發生 | EventHandler |
MouseMove | 滑鼠移動過程中重複發生 | MouseEventHandler |
MouseDown | 滑鼠鍵按下時發生 | MouseEventHandler |
MouseLeftButtonDown | 滑鼠左鍵按下時發生 | |
MouseRightButtonDown | 滑鼠右鍵按下時發生 | |
MouseUp | 滑鼠鍵松開時發生 | MouseEventHandler |
MouseLeftButtonUp | 滑鼠左鍵松開時發生 | |
MouseRightButtonUp | 滑鼠右鍵松開時發生 | |
MouseWheel | 滑鼠滾輪滾動時發生 | MouseEventHandler |
另外還有Preview+事件 如: PreviewMouseMove 等等事件, 先于正常的滑鼠事件發生。
發生順序:
滑鼠事件按以下順序發生:
MouseEnter
MouseMove
MouseHover / MouseDown / MouseWheel
MouseUp
MouseLeave
與元件的綁定
元件名稱.事件名稱+=new System.EventHandler(事件名稱);
OR 元件名稱.事件名稱+=new System.MouseEventHandler(事件名稱);
滑鼠事件使用條件
某些控件的功能增強: TreeView裡面元素的拖動
或者自定義控件的許多功能: flash的時間軸
控件内拖動功能舉例:
l 獲得MouseDown時position。
l 在 MouseMove中檢查滑鼠左鍵按下情況 和 滑鼠移動情況。
l 把移動的舉例和系統提供的SystemParameters.MinimumHorizontalDragDistance比較
如:
Math.Abs(now.X-start.X)>SystemParameters.MinimumHorizontalDragDistance
l 在MouseUp中根據左鍵的釋放情況,判斷釋放拖動完成,然後做相應處理。
特殊問題解決
我們在編寫程式代碼過程中可能遇到某些滑鼠事件完全不被觸發的情況,如果你的MouseDown不觸發,那麼你可以試試PreviewMouseDown事件,其他事件類似,具體什麼原因,我也不清楚,感覺MouseDown 與 PreviewMouseDown是兩套獨立的事件鍊,互相不影響。
MouseMove的觸發不是按固定位移量觸發的,(例如:滑鼠滑動選擇元件,若滑鼠移動太快,某些被劃過的元件就不被選擇了),是以某些情況下在MouseMove裡處理 不太可靠。
學習記錄:這個比較明确,留下來當字典查。
本文來自chenxin的部落格,原文位址:http://blog.chukong-inc.com/index.php/2012/05/18/wpf%E9%BC%A0%E6%A0%87%E4%BA%8B%E4%BB%B6%E7%AE%80%E4%BB%8B/