键盘事件有四个,PreviewKeyDown、PreviewKeyUp、KeyDown、KeyUp,
在事件中,对参数e的Key属性进行判定。
这里以一个TextBox的文本控件为例。检测到回车键给予提示。
1、在键盘事件中,检测单个按键
1、前台增加文本控件并增加键盘事件
2、后台的键盘抬起事件中加入
if (e.Key == Key.Enter)
{
MessageBox.Show("检测到回车键已按下");
}
像这样:
同理,如果响应其它的键盘按键,在Key后面点 . 选择其它的键值。
2、在键盘事件中,响应组合键盘(两个或者两个以上)
这里以Ctrl + S为例
- 前台定义键盘事件
- 后台在事件中加入代码
有两种写法:
第一种:
1、同时按下了Ctrl + S键
2、修饰键只能按下Ctrl,如果还同时按下了其他修饰键,则不会进入
if (e.KeyboardDevice.Modifiers == ModifierKeys.Control && e.Key == Key.S)
{
MessageBox.Show("检测到Ctrl、S已按下");
}
第二种:
1、同时按下了Ctrl + S键
2、修饰键只要按下Ctrl,不管是否还同时按下了其他修饰键,都会进入
if (e.KeyboardDevice.Modifiers.HasFlag(ModifierKeys.Control) && e.Key == Key.H)
{
MessageBox.Show("检测到Ctrl、S已按下");
}
其中 ModifierKeys.Control后面的Control可换成其它四个
3、在非键盘事件中(也可在键盘事件中),检测单个或者多个键盘值
利用Keyboard类的静态方法IsKeyDown,完全脱离事件参数e,来检测判、断键盘按键
这种方式可以在任何事件中去检测多个组合按键或者单个按键。
if (Keyboard.IsKeyDown(Key.LeftCtrl) && Keyboard.IsKeyDown(Key.LeftShift ) && Keyboard.IsKeyDown(Key.S))
{
//只要当下同时按下的键中包含LeftCtrl、LeftShift 和S ,就会进入
}
4、对于具有开关性质的按键,比如大小写、数字键盘等键值状态判定
这里以数字键盘是否打开为例:
if (KeyStates.Toggled == Keyboard.GetKeyStates(Key.NumLock))
{
}
判定左边为一个具体的状态,包括按下(Down)、打开(Toggled)、未打开(None)三种状态
判定的右边为要检测的键值