Есть ли способ смотреть WPF-маршруты?

Мне было интересно, есть ли способ просмотреть все RoutedEvents, которые были созданы в приложении WPF. Способ написать некоторую информацию о событиях, запущенных на консоль, будет префектом, чтобы увидеть, что происходит.

Ответ 1

Да, но это требует некоторого отражения. Вам лучше использовать такой инструмент, как Snoop, который уже делает тяжелый подъем для вас.

На вкладке События вы можете увидеть список событий и элемент, который обрабатывал его.

Ответ 2

Я нашел другой способ:

Я добавил это к загруженному обработчику моего UserControl.

var events = EventManager.GetRoutedEvents();
foreach (var routedEvent in events)
{
    EventManager.RegisterClassHandler(typeof(myUserControl), 
                                      routedEvent, 
                                      new RoutedEventHandler(handler));
}

и это метод обработчика:

internal static void handler(object sender, RoutedEventArgs e)
{
    if (e.RoutedEvent.ToString() != "CommandManager.PreviewCanExecute" &&
            e.RoutedEvent.ToString() != "CommandManager.CanExecute")
        Console.WriteLine(e.OriginalSource+"=>"+e.RoutedEvent);
}

События CanExecute в моем случае слишком много. Если вы тоже хотите их увидеть, просто удалите оператор if.