I was wondering if there's a way to watch all RoutedEvents that are raised in a WPF application. A way to write some info about the events fired to the console would be prefect to see what's going on.
            Asked
            
        
        
            Active
            
        
            Viewed 6,696 times
        
    2 Answers
21
            
            
        I've found another way:
I've added this to the loaded handler of my UserControl.
var events = EventManager.GetRoutedEvents();
foreach (var routedEvent in events)
{
    EventManager.RegisterClassHandler(typeof(myUserControl), 
                                      routedEvent, 
                                      new RoutedEventHandler(handler));
}
and this is the handler method:
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);
}
The CanExecute events are a bit too much in my case. If you would like to see these too, just remove the if statement.
        Sorskoot
        
- 10,190
 - 6
 - 55
 - 98
 
- 
                    Brilliant! It is always great if you can use existing utilities of the framework, instead of using third-party tools – Piotr Golacki Nov 11 '22 at 22:42
 
16
            Yes, but it requires some reflection. You're better off using a tool like Snoop that already does the hard lifting for you.
In the tab Events you can see list of events, and the element that handled it.
        Jonas Marty
        
- 348
 - 3
 - 13
 
        Kent Boogaart
        
- 175,602
 - 35
 - 392
 - 393