2024年6月3日发(作者:)

WPF中的鼠标事件详解

Uielement和ContentElement都定义了十个以Mouse开头的事件,8个以

PreviewMouse开头的事件,

MouseMove,PreviewMouseMove,MouseEnter,Mouseleave的事件处理器类型都是

MouseEventHandler类型。这些事件都具备对应得MouseEventargs对象。(没有pre

的enter和leave)。

当鼠标穿过一个Element时,mousemove会发生很多次,但是mouseenter和

mouseleave只会发生一次,分别在鼠标进入element区域以及离开element区域是发

生。

UIElement和ContentElement定义了两个只读属性,ISmouseOver:如果鼠标在

Element上,这个属性为true,如果鼠标不仅在这个Element上,且不在其任何子控件上,

那么IsMouseDirectOver也为true。

当处理MouseMove ,MouseEnter,Mouseleave事件时我们还可以获取正在按下的

鼠标按键式哪一个:Leftbutton,middlebutton,RightButton,以及两个扩充按键

XButton1和XButton2。(这五个都是MouseEventargs的属性),他门的值是

MouseButtonState枚举的一个,只有两种状态,Pressed和Released.

对于MouseMove事件,你还有可能想要获取当前鼠标的位置,可以使用

MouseEventargs的GetPostion方法。通过事件的MouseEventargs的ChangeButton

属性可以得知是哪个鼠标按钮被按下。

MouseWheel和PreviewWheel事件,主要是处理鼠标滚轮事件,

MousewheelEventargs有一个属性Delta属性,它记录鼠标滚轮的刻度,现在的鼠标每

滚一下刻度是120,转向用户的时候就是-120.可以利用systemprarameters。

IsMouseWheelPresent得知鼠标是否有滚轮。

Mouse类的静态方法也可以获取鼠标的位置和状态,也具有静态方法可以添加或删除

鼠标事件处理器。MouseDevice类有一些实例方法可以用来获取鼠标位置和按钮状态。

鼠标在屏幕上使用一个小小的位图来显示的,此图标称作鼠标光标,在Wpf中,光标

就是Cursor类型的对象,可以将Cursor对象设置到FrameworkElement的Cursor属性,

就可以将指定的鼠标图标关联到某个element,当然你也可以重载onQueryCursor方法或

者给QueryCursor事件添加处理器,鼠标移动就会触发这个事件,QueryCursorEventargs

伴随这个事件,他有一个Cursor属性,可以供我们使用。

捕获鼠标:在我们鼠标按下后一旦鼠标移出element的区域,就收不到鼠标事件了,

但是有时候这个并不是我们想要的结果,所有需要在鼠标进入这个了element的时候获取

鼠标,这样鼠标就算离开了这个区域也会获取到鼠标消息。UIelement和contentelement

都定义了CaputerMouse方法,Mouse类也提供了Caputer静态方法,让我们可以捕获

鼠标,一旦捕获成功就会返回true,在我们的事件处理完成后应该释放这个捕获,使用

ReleaseMouseCaputer.

如果使用了鼠标捕获,就必须安装LostmouseCaputer事件的处理器,做一些必要的

收尾工作。下面我们写一个小程序来使用这些事件:

using System;