System.Windows.Input.Key枚举中的Equals键没有条目?

时间:2011-03-02 17:01:01

标签: .net wpf keyboard

我正在尝试在InputGesture上设置RoutedUICommand,并在用户按下Ctrl + =时将其挂起。我正在使用KeyGesture对象,但我无法在System.Windows.Input.Key枚举中看到等于('=')键的条目。

我期待的是能够做到以下几点:

ZoomIn = new RoutedUICommand("Zoom In", "ZoomIn", typeof(Window),
    new InputGestureCollection { 
        new KeyGesture(Key.Equals, ModifierKeys.Control) 
    });

有人能指出我正确的方向吗?

3 个答案:

答案 0 :(得分:2)

正如克里斯夫所指出的,我需要让我的大脑稍微活动一下。对于它的价值,处理KeyDown事件时生成的值为Key.OemPlus

<强>更新
这样做的一个结果是,如果你和我做同样的事情并且你将在菜单中使用该命令,你可能想要使用重载的KeyGesture构造函数来获取第3个参数displayString。例如:

new KeyGesture(Key.Equals, ModifierKeys.Control, "Ctrl+=")

否则,您会看到键盘快捷键显示为(在我的情况下)“Ctrl + OemPlus”,这不是完全合乎需要的。不可否认,上述情况仍然不是很好,但它比“OemPlus”更好。

答案 1 :(得分:2)

一个hack是捕获shift keydown,如果OemPlus keydown在shift键之前,你有一个“OemEqual”。 代码可能如下所示:

private bool shift = false;
private void Window_KeyDown(object sender, KeyEventArgs e)
{
    Key key = e.Key;
    switch (key) {
        case Key.LeftShift:  this.shift = true; break;
        case Key.RightShift: this.shift = true; break;
        case Key.C:         this.helper.Command(CMD.CLEAR); break;
        case Key.Enter:     this.helper.Command(CMD.EVAL); break;
        case Key.OemMinus:  this.helper.Operator(OP.SUB); break;
        case Key.OemPlus: 
            if (this.shift) {
                this.helper.Operator(OP.ADD);
            } else {
                this.helper.Command(CMD.EVAL);
            } break;
        case Key.OemPeriod: this.helper.Number(NumberPad.DECIMAL); break;
        case Key.D0:        this.helper.Number(NumberPad.ZERO); break;
        case Key.D1:        this.helper.Number(NumberPad.ONE); break;
        case Key.D2:        this.helper.Number(NumberPad.TWO); break;
        :
    }
}
private void Window_KeyUp(object sender, KeyEventArgs e)
{
    Key key = e.Key;
    switch (key) {
        case Key.LeftShift: this.shift = false; break;
        case Key.RightShift: this.shift = false; break;
    }
}

答案 2 :(得分:0)

如果我测试一下,我会将Key.Unknown作为关键代码,PlatformKeyCode= = 0x000000bb(187)