Добавить прослушиватель для всех событий элемента в WPF

StackOverflow https://stackoverflow.com/questions/634434

Вопрос

Я хотел бы подключить все доступные события элемента за один вызов. Примерно так:

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
}

Я создал это по вдохновению от:

scroll top