Я предлагаю метод, который усиливает упомянутый @Doc.
Следующий код @Doc, упомянутый, будет работать, так как перенаправленное событие KeyDown всплывает в крайнее Window
Как только Window
получает событие KeyDown, всплывающее из внутреннего элемента, Window
запускает любой зарегистрированный в нем обработчик событий KeyDown, например HandleKeyPress
.
private void UserControl_Loaded(object sender, RoutedEventArgs e) {
var window = Window.GetWindow(this);
window.KeyDown += HandleKeyPress;
}
private void HandleKeyPress(object sender, KeyEventArgs e) {
//Do work
}
Но это +=
рискованно, программист, скорее всего, забудет отменить регистрацию обработчика событий. Тогда произойдет утечка памяти или возникнут ошибки.
Здесь я предлагаю,
YourWindow.xaml.cs
protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
// You need to have a reference to YourUserControlViewModel in the class.
YourUserControlViewModel.CallKeyDown(e);
// Or, if you don't like ViewModel, hold your user-control in the class then
YourUserControl.CallKeyDown(e);
}
YourUserControlViewModel.cs или YourUserControl.xaml.cs
public void CallKeyDown(KeyEventArgs e) {
//Do your work
}
Нет необходимости кодировать в xaml.