主要事件 | 子事件 | 触发条件 | |
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里处理 不太可靠。
原文地址: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/