Нет записи для ключа Equals в перечислении System.Windows.Input.Key? - PullRequest
5 голосов
/ 02 марта 2011

Я пытаюсь установить 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 ]

2 голосов
/ 07 марта 2011

Один из способов - поймать нажатие клавиши Shift, и если нажатие клавиши OemPlus происходит до нажатия клавиши 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 голосов
/ 02 марта 2011

Как указал ChrisF, мне нужно было немного задействовать свой мозг.Для чего стоит, значение, генерируемое при обработке события KeyDown, равно Key.OemPlus.

Обновление:
Одним из следствий этого является то, что если вы делаететак же, как и я, и вы собираетесь использовать команду в меню, вы, вероятно, захотите использовать перегруженный конструктор для KeyGesture, который принимает третий параметр displayString.Например:

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

В противном случае вы увидите сочетание клавиш, отображаемое как (в моем случае) «Ctrl + OemPlus», что не совсем желательно.Надо признать, что выше все еще не очень хорошо, но это лучше, чем «OemPlus».

0 голосов
/ 02 марта 2011

если я проверю его, я получу Key.Unknown в качестве кода ключа и PlatformKeyCode= = 0x000000bb (187)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...