Стрелки клавиш не стреляют - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь привязать четыре клавиши со стрелками к команде в моем ViewModel, но они не работают.У меня есть ContentControl в Window с InputBindings примерно так:

<ContentControl.InputBindings>
    <KeyBinding Command="{Binding EndCmd}" Key="Esc" />
    <KeyBinding Command="{Binding PanUpCmd}" Key="Up" />
    <KeyBinding Command="{Binding PanDownCmd}" Key="Down" />
    <KeyBinding Command="{Binding PanLeftCmd}" Key="Left" />
    <KeyBinding Command="{Binding PanRightCmd}" Key="Right" />
</ContentControl.InputBindings>

В моем ViewModel:

public RelayCommand EndCmd { get; set; }
public RelayCommand PanUpCmd { get; set; }
public RelayCommand PanDownCmd { get; set; }
public RelayCommand PanLeftCmd { get; set; }
public RelayCommand PanRightCmd { get; set; }

public MainViewModel()
{
    EndCmd = new RelayCommand(End);
    PanUpCmd = new RelayCommand(PanUp);
    PanDownCmd = new RelayCommand(PanDown);
    PanLeftCmd = new RelayCommand(PanLeft);
    PanRightCmd = new RelayCommand(PanRight);
}

//functions that the commands call here

Теперь клавиша Escape работает нормально,но четыре клавиши со стрелками нет.Почему это?Они настроены точно так же.Я подумал, может быть, это как-то связано с DataContext, поэтому я поместил KeyBinding s в Window s InputBindings`, но это была та же проблема.

Редактировать: я тестировал каждый ключна моей клавиатуре.Каждая клавиша срабатывает правильно, кроме четырех клавиш со стрелками.Я проверил, проглатывал ли Content из ContentControl события, и это не было.На самом деле, Control, то есть Content, имеет свое собственное событие нажатия клавиш, которое также никогда не вызывается и не является previewkeydown с помощью клавиш со стрелками.

Ответы [ 2 ]

1 голос
/ 16 апреля 2019

Я скопировал ваш код, и он, кажется, работает нормально.

Единственная причина, по которой я могу думать, чтобы это не работало в вашем случае (особенно, если Esc работает, но не другие клавиши), заключается в том, что любой контент, который вы используете внутри ContentControl, также содержит привязки ввода для клавиши направления.

В этом случае привязки в содержимом переопределяют привязки, которые вы установили для самого ContentControl.

0 голосов
/ 16 апреля 2019
 public ICommand PanRightCmd 
    {
        get { return (ICommand)GetValue(SearchBarEnterCmdProperty); }
        set { SetValue(SearchBarEnterCmdProperty, value); }
    }

...

            PanRightCmd= new RelayCommand(o => PanRightCmdExecute());

https://www.c -sharpcorner.com / UploadFile / 20c06b / ICommand-и-RelayCommand-в-МОФ /

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