Добавить прослушиватель для всех событий элемента в WPF
-
10-07-2019 - |
Вопрос
Я хотел бы подключить все доступные события элемента за один вызов. Примерно так:
elem.AddHandler(AnyRoutedEvent, (RoutedEventHandler)handler)
Как я могу это сделать?
Решение
Попробуйте сделать так, чтобы получить все события типа Button ... Вы можете заменить другой тип.
RoutedEvent[] events = EventManager.GetRoutedEventsForOwner(typeof(Button));
foreach (RoutedEvent e in events)
elem.AddHandler(e, handler);
Вы также можете заменить следующее, чтобы получить ВСЕ перенаправленные события для ВСЕХ типов, но это был бы довольно большой список!
RoutedEvent[] events = EventManager.GetRoutedEvents();
Другие советы
Вы можете использовать метод RegisterClassHandler в Event Manager для статического прослушивания всех элементов одновременно:)
EventManager.RegisterClassHandler(typeof(your class), Button.ClickEvent, new RoutedEventHandler(OnButtonClick));
static void OnButtonClick(object sender, RoutedEventArgs e)
{
//Do awesome stuff with the button click
}