Как я могу установить обработчик событий (например, keydown
) для всего решения, а не для одного окна?
Как установить evenHandler в WPF для всех окон (всего приложения)?
Ответы (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
, чтобы получить информацию о нажатой клавише.
new RoutedEventHandler(..)
на new KeyEventHandler(Window_KeyDown)
- person BatteryBackupUnit; 21.07.2015
Как насчет этого:
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
Либо вы регистрируете событие во всех окнах и передаете его глобальной функции/событию, либо (в случае нажатия клавиши или подобного) вы используете какой-либо глобальный захват событий (например, ЭТО для клавиатуры).