Как установить EvenHandler в WPF для всех окон (всего приложения)?
Как я могу установить обработчик событий (например, keydown
) для всего решения, а не одного окна?
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) {
}
}
Что ж, KeyDown
будет работать только в текущем окне, потому что вам нужно сосредоточиться на KeyDown
, Что вы можете сделать, это добавить обработчик во все окна и отправить другое событие в эти обработчики, а затем зарегистрировать все классы, которые вам нужны, в этом новом событии.
в качестве альтернативы, посмотрите на Observer
шаблон
Вы должны использовать делегата, чтобы связать событие (где бы оно ни было) и функцию, которую вы готовы работать, когда событие переходит.
Вы можете загрузить столько событий, сколько хотите, своему делегату.
MZE.
Ты не можешь
Каждый раз вы регистрируете событие во всех окнах и передаете его глобальной функции / событию или (в случае нажатия клавиши или аналогичной) вы используете глобальный "перехват" (например, ЭТО для клавиатуры).