如何捕获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

+1

PreviewKeyDown检测回退给我。如果我在你的switch语句中添加一个Key.Back的情况,它就会像我期望的那样被调用。 – 2010-10-12 11:31:14

+0

好的谢谢。我添加了一个答案。而且,我确定那把钥匙的命名也让我知道了。 :) – 2010-10-12 12:14:20

要检测退格键,您需要使用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; 
    } 
}