主要有以下幾種事件: 主要事件 子事件 觸發條件 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/