如何捕获WPF/C#中的CTRL-BACKSPACE?
问题描述:
我有一个使用PreviewKeyDown
一个应用程序捕获CTRLX击键(其中X
是任何字母)沿着线:如何捕获WPF/C#中的CTRL-BACKSPACE?
Key key = (e.Key == Key.System ? e.SystemKey : e.Key);
if (e.KeyboardDevice.Modifiers == ModifierKeys.Control) {
switch (key) {
case Key.A: keyStroke = 0x01; break;
case Key.B: keyStroke = 0x02; break;
:
因为似乎没有成为退格键击,我捕捉的PreviewTextInput
(与非CTRL击键一起,从而避免手工试图映射按键字符):
private void Window_PreviewTextInput(object sender, TextCompositionEventArgs e) {
Char ch = e.Text.ToCharArray()[0];
if ((ch >= (Char)0x01) && (ch <= (Char)0x7e)) {
// Do something with character.
}
}
但是,我需要能够捕获用户按下CTRLBACKSPACE。我很困惑,因为PreviewKeyDown
似乎并不知道backspace,并且TextCompositionEventArgs
事件似乎没有携带关键状态(如CTRL
或)。
什么是最好的方式(或者更确切地说,任何方式)拦截CTRLBACKSPACE?
答
要检测退格键,您需要使用Key枚举的Key.Back值。
例如:
Key key = (e.Key == Key.System ? e.SystemKey : e.Key);
if (e.KeyboardDevice.Modifiers == ModifierKeys.Control) {
switch (key) {
case Key.A: keyStroke = 0x01; break;
case Key.B: keyStroke = 0x02; break;
case Key.Back: // Do something
break;
}
}
PreviewKeyDown检测回退给我。如果我在你的switch语句中添加一个Key.Back的情况,它就会像我期望的那样被调用。 – 2010-10-12 11:31:14
好的谢谢。我添加了一个答案。而且,我确定那把钥匙的命名也让我知道了。 :) – 2010-10-12 12:14:20