WPf经典教程11键盘输入,鼠标输入,焦点处理-精品资料_第1页
WPf经典教程11键盘输入,鼠标输入,焦点处理-精品资料_第2页
WPf经典教程11键盘输入,鼠标输入,焦点处理-精品资料_第3页
WPf经典教程11键盘输入,鼠标输入,焦点处理-精品资料_第4页
WPf经典教程11键盘输入,鼠标输入,焦点处理-精品资料_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、键盘类和键盘事件WPF提供了基础的键盘类(System.Input.Keyboard类),该类提供与键盘相关的事件、方法和属性,这些事件、方法和属性提供有关键盘状态的信息。Keyboard的事件也通过UIElement等XAML基元素类的事件向外提供。对于键盘操作,其常用的事件有两组:KeyDown事件和PreviewKeyDown事件:处理键盘键按下KeyUp事件和PreviewKeyUp事件:处理键盘键抬起其中KeyDown和KeyUp事件属于冒泡路由事件,而PreviewKeyDown和PreviewKeyup属于隧道路由事件。为了使元素能够接收键盘输入,该元素必须可获得焦点。默认情况下,大多数UIElement派生对象都可获得焦点。如果不是这样,则要使元素可获得焦点,请将基元素上的Focusable属性设置为true。像StackPanel和Canvas这样的Panel类将Focusable的默认值设置为false。因此,对要获取键盘焦点的这些对象而言,必须将Focusable设置为true。例如:在笔者的Notebook中有''静音〃、''增大音量〃、''减小音量〃这三个快捷键,在一个应用程序的窗体上处理这三个键的点击可以:<Windowx:Class="InputCommandAndFocus.Window1"xmlns="/winfx/2006/xaml/presentation"xmlns:x="/winfx/2006/xaml"4:Title="Window1"Height="300"Width="480"

4:Focusable="True"PreviewKeyDown="Window_PreviewKeyDown"><Canvas><!—...—></Canvas></Window>privatevoidWindow_PreviewKeyDown(objectsender,KeyEventArgse){if(e.Key==Key.VolumeMute)TOC\o"1-5"\h\z{//按下'、静音〃键txtMessage.Text="Mute";e.Handled=true;}else if(e.Key==Key.VolumeUp){//按下''增大音量〃键txtMessage.Text"Up";e.Handledtrue;}elseif(e.Key==Key.VolumeDown){//按下''减小音量〃键txtMessage.Text"Down";e.Handledtrue;}}

二、鼠标类和鼠标事件WPF提供的System.Input.Mouse类提供与鼠标相关的事件、方法和属性,这些事件、方法和属性提供有关鼠标状态的信息。与Keyboard类类似,其事件也通过UIElement等基元素向外提供。其事件主要有以下几组(每个事件均包含XXX冒泡路由事件和PreviewXXX隧道路由事件)MouseDown、MouseUp事件:处理鼠标键的按下与抬起MouseEnter、MouseLeave、MouseMove:处理鼠标进入、离开控件及在控件上移动MouseWheel:处理鼠标滚轮滚动另外,对于鼠标位置的捕获,使用Mouse类的GetPosition方法,其参数是一个UIElement,表示其鼠标位置基于哪一个控件的坐标系。例如,对于一个矩形图形,设置其鼠标的各种事件:<RectangleCanvas.Left="246"Canvas.Top="46"Height="118"Name="mainRectangle"Stroke="Black"Width="200"Fill="White"MouseEnter="mainRectangle_MouseEnter"MouseLeave="mainRectangle_MouseLeave"MouseMove="mainRectangle_MouseMove"MouseDown="mainRectangle_MouseDown"MouseWheel="mainRectangle_MouseWheel"/>privatevoidmainRectangle_MouseEnter(objectsender,MouseEventArgse){//鼠标进入控件时,控件的颜色为红色

mainRectangle.Fill=newSolidColorBrush(Colors.Red);5:}privatevoidmainRectangle_MouseLeave(objectsender,MouseEventArgse){//鼠标离开控件时,控件的颜色为红色mainRectangle.Fill=newSolidColorBrush(Colors.White);}privatevoidmainRectangle_MouseMove(objectsender,MouseEventArgse){//获取基于Rectangle的鼠标的坐标PointpointBaseRectangle=Mouse.GetPosition(mainRectangle);txtMessage.Text=string.Format("MousePosition(BasetheRectangle)is({0},{1})",pointBaseRectangle.X,pointBaseRectangle.Y);txtMessage.Text+="\r\n";//获取基于窗体的鼠标的坐标PointpointBaseWindow=Mouse.GetPositionthis);txtMessage.Text+=string.Format("MousePosition(BasetheWindow)is({0},{1})”,

27:pointBaseWindow.X,pointBaseWindow.Y);27:}privatevoidmainRectangle_MouseDown(objectsender,MouseButtonEventArgse)(//获取点出的鼠标的按钮MouseButtonbutton=e.ChangedButton;txtMessage.Text+="\r\n";txtMessage.Text+=string.Format("MouseButtonis{0}",button.ToString());}privatevoidmainRectangle_MouseWheel(objectsender,MouseWheelEventArgse){if(e.Delta>0)TOC\o"1-5"\h\z{//如果向上推动滚轮,图形的宽度增加rectangle1.Width++;}if (e.Delta<0){//如果向下推动滚轮,图形的宽度减小rectanglel.Width--;}53:}

三、焦点处理在WPF中,有两个与焦点有关的主要概念:键盘焦点和逻辑焦点。键盘焦点指接收键盘输入的元素,而逻辑焦点指焦点范围中具有焦点的元素。1、键盘焦点:键盘焦点指当前正在接收键盘输入的元素。在整个桌面上,只能有一个具有键盘焦点的元素。在WPF中,具有键盘焦点的元素会将IsKeyboardFocused设置为true。Keyboard类的静态属性FocusedElement获取当前具有键盘焦点的元素。为了使元素能够获取键盘焦点,基元素的Focusable和IsVisible属性必须设置为true。有些类(如Panel基类)默认情况下将Focusable设置为false;因此,如果您希望此类元素能够获取键盘焦点,必须将Focusable设置为true。可以通过用户与UI交互(例如,按Tab键定位到某个元素或者在某些元素上单击鼠标)来获取键盘焦点。还可以通过使用Keyboard类的Focus方法,以编程方式获取键盘焦点。Focus方法尝试将键盘焦点给予指定的元素。返回的元素是具有键盘焦点的元素,如果有旧的或新的焦点对象阻止请求,则具有键盘焦点的元素可能不是所请求的元素。2、逻辑焦点逻辑焦点指焦点范围中的FocusManager..::.FocusedElement。焦点范围是一个跟踪其范围内的FocusedElement的元素。当键盘焦点离开焦点范围时,焦点元素会失去键盘焦点,但保留逻辑焦点。当键盘焦点返回到焦点范围时,焦点元素会再次获得键盘焦点。这使得键盘焦点可以在多个焦点范围之间切换,但确保了在焦点返回到焦点范围时,焦点范围中的焦点元素再次获得键盘焦点。一个应用程序中可以有多个具有逻辑焦点的元素,但在一个特定的焦点范围中只能有一个具有逻辑焦点的元素。GetFocusScope返回指定元素的焦点范围。

WPF中默认情况下即为焦点范围的类有Window、Menuitem、ToolBar和ContextMenUoGetFocusedElement获取指定焦点范围的焦点元素。SetFocusedElement设置指定焦点范围中的焦点元素。SetFocusedElement通常用于设置初始焦点元素。3、键盘导航当按下导航键之一时,KeyboardNavigation类将负责实现默认键盘焦点导航。导航键有:Tab、Shift+Tab、Ctrl+Tab、Ctrl+Shift+Tab、向上键、向下键、向左键和向右键。可以通过设置附加的KeyboardNavigation属性TabNavigation、ControlTabNavigation和DirectionalNavigation来更改导航容器的导航行为。这些属性是KeyboardNavigationMode类型,可能值有Continue、Local、Contained、Cycle、Once以及None。默认值是Continue,这意味着元素不是导航容器。4、焦点事件与键盘焦点相关的事件有PreviewGotKeyboardFocus、GotKeyboardFocus、PreviewLostKeyboardFocus

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论