Mahmut Koyuncu Ответов: 1

Проблема привязки клавиш со стрелками в WPF


Привет люди,
У меня есть проблема с привязкой клавиши со стрелками к команде. Другие ключи работают нормально. Например, код xaml, приведенный ниже, работает нормально

<Window.InputBindings>
    <KeyBinding Command="{Binding Path=DenemeCommand}" Key="A" />
</Window.InputBindings>



Но следующий код xaml этого не делает

<Window.InputBindings>
    <KeyBinding Command="{Binding Path=DenemeCommand}" Key="Left" />
</Window.InputBindings>



В codebehind есть такая же стуация.

Код ниже работает нормально

var viewmodel = (ViewModels.ViewModelLocator)FindResource("Locator");
var gesture = new KeyGesture(Key.Delete);
var inputBinding = new InputBinding(viewmodel.MainViewModel.DenemeCommand, gesture);
InputBindings.Add(inputBinding);


этот код-нет.

var viewmodel = (ViewModels.ViewModelLocator)FindResource("Locator");
 var gesture = new KeyGesture(Key.Left);
 var inputBinding = new InputBinding(viewmodel.MainViewModel.DenemeCommand, gesture);
 InputBindings.Add(inputBinding);


Я не могу понять, почему это происходит. Не только левый ключ. Все клавиши со стрелками(вправо,вниз и т.д.) Не запускают выполнение команды.

Заранее спасибо.

1 Ответов

Рейтинг:
2

Laurent Chougrani

Для тех, кто все еще будет задаваться вопросом,Left,Right,Down, Up не запускают событие key down (я думаю, что это событие "проглатывается" некоторыми другими компонентами), вам придется сделать attache событие на KeyUpEvent или PreviewKeyUpEvent вот так :

EventManager.RegisterClassHandler(typeof(MyControl), TextBox.PreviewKeyUpEvent, new KeyEventHandler(MyControl_KeyDown));

и затем

private void MyControl_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Left)
    {

    }
    if (e.Key == Key.Right)
    {

    }
    // And so on
}