WPF鼠标事件

主要有以下几种事件:

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

发布了14 篇原创文章 · 获赞 10 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_36545099/article/details/78216862