Welcome

首页 / 软件开发 / Silverlight / WPF and Silverlight学习笔记(十四):键盘输入、鼠标输入、焦点处理

WPF and Silverlight学习笔记(十四):键盘输入、鼠标输入、焦点处理2010-12-17 博客园 龙腾于海一、键盘类和键盘事件

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中有“静音”、“增大音量”、 “减小音量”这三个快捷键,在一个应用程序的窗体上处理这三个键 的点击可以:

1: <Window x:Class="InputCommandAndFocus.Window1"
2: xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation& quot;
3: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4: Title="Window1" Height="300" Width="480"
5: Focusable="True" PreviewKeyDown="Window_PreviewKeyDown">
6: <Canvas>
7: <!-- ... -->
8: </Canvas>
9: </Window>

1: private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
2: {
3: if (e.Key == Key.VolumeMute)
4: {
5: // 按下“静音”键
6: txtMessage.Text = "Mute";
7: e.Handled = true;
8: }
9: else if (e.Key == Key.VolumeUp)
10: {
11: // 按下“增大音量”键
12: txtMessage.Text = "Up";
13: e.Handled = true;
14: }
15: else if (e.Key == Key.VolumeDown)
16: {
17: // 按下“减 小音量”键
18: txtMessage.Text = "Down";
19: e.Handled = true;
20: }
21: }