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;


发布评论