我有一些代码(应该是)捕获击键。顶层窗口有一个

Keyboard.PreviewKeyDown="Window_PreviewKeyDown"

子句,支持的CS文件包含:
private void Window_PreviewKeyDown(object sender, KeyEventArgs e) {
    if (e.KeyboardDevice.Modifiers == ModifierKeys.Control) {
        switch (e.Key) {
            case Key.L:
                btnPrev_Click(sender, new RoutedEventArgs());
                e.Handled = true;
                break;
            case Key.R:
                btnNext_Click(sender, new RoutedEventArgs());
                e.Handled = true;
                break;
        }
    }
}

现在工作正常,CTRLL和CTRLR都调用相关函数。

一旦我将Modifer检查更改为使用ModifierKeys.Alt,它将停止工作。换句话说,ALTL和ALTR都不调用函数。

我在这里想念什么?

最佳答案

如果使用Alt修饰符,则e.Key返回Key.System,而实键位于e.SystemKey中。您可以使用以下代码来始终获得正确的按下键:

Key key = (e.Key == Key.System ? e.SystemKey : e.Key);

关于c# - PreviewKeyDown没有看到Alt修饰符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3099472/

10-12 05:06