C# WPF как перехватить нажатие клавиши пробел и Enter?

Учебная задача. Написание клавиатурного тренажёра. Пользователю на экран выводится строка, и он должен нажать клавиши из неё на клавиатуре. С большинством клавиш всё решилось при помощи добавления в Window

KeyDown="Key_Down_Handler"

Возникла проблема с тем, что пробел таким способом обработать не получается. Если никакой элемент не выбран, то он сработает, но если выбран, то он либо ничего не делает, либо, если выбрана какая-то кнопка, жмёт на неё. Мне же нужно, что бы при нажатии на пробел срабатывала функция, например DoSomething()

Пробовал делать через Window.InputBindings

<Window.InputBindings>
    <KeyBinding ????="DoSomething" Key="Space"/>
</Window.InputBindings>

Но не смог разобраться как связать нажатие кнопки с нужным методом. И плюс ещё нужно что бы не срабатывал стандартный функционал пробела, нажатие на выделенный элемент. Тоже самое и с клавишей Enter. Как то можно сделать, что бы при нажатии этих клавиш в любом месте приложения срабатывала функций DoSomething и не срабатывало нажатие на выделенный элемент?


Ответы (1 шт):

Автор решения: user11354240

Нужно использовать событие PreviewKeyDown на уровне окна (оно транслируется вниз по иерархии визуального дерева). В обработчике устанавливать KeyEventArgs.Handled=true, чтобы не срабатывала стандартная обработка контролов.

→ Ссылка