5 ответов:
Зарегистрируйте глобальный обработчик событий в классе приложения (App.cs), например:
public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); EventManager.RegisterClassHandler(typeof(Window), Window.KeyDownEvent, new RoutedEventHandler(Window_KeyDown)); } void Window_KeyDown(object sender, RoutedEventArgs e) { // your code here } }Это будет обрабатывать событие
KeyDownдля любогоWindowв вашем приложении. Вы можете привестиeкKeyEventArgs, чтобы получить информацию о нажатой клавише.
Как насчет этого:
public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { EventManager.RegisterClassHandler(typeof(Window), Window.KeyDownEvent, new RoutedEventHandler(KeyDown)); base.OnStartup(e); } void KeyDown(object sender, RoutedEventArgs e) { } }
Вы должны использовать делегат, чтобы соединить событие (где бы оно ни было) и функцию, которую вы хотите использовать, когда событие переходит.
Вы можете загрузить в делегат столько событий, сколько захотите.
MzE.
Ну,
KeyDownбудет работать только в текущем окне, потому что вам нужен фокус дляKeyDown. Что вы можете сделать, это добавить обработчик во все окна и отправить другое событие в этих обработчиках, а затем зарегистрировать все классы, которые вам нужны с этим новым событием.В качестве альтернативы, взгляните на шаблон
Observer
Ты не можешь.
В-восьмых, вы регистрируете событие во всех окнах и передаете его глобальной функции / событию или (в случае нажатия клавиши или аналогичного) используете какой-то глобальный "захват событий" (например, THIS для клавиатуры).
Comments