有没有办法观看 WPF 路由事件?

发布于 2024-07-26 17:51:11 字数 94 浏览 7 评论 0原文

我想知道是否有一种方法可以监视 WPF 应用程序中引发的所有 RoutedEvent。 一种将有关触发到控制台的事件的一些信息写入控制台的方法将非常适合查看正在发生的情况。

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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

女中豪杰 2024-08-02 17:51:11

我找到了另一种方法:

我已将其添加到我的用户控件的加载处理程序中。

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 语句即可。

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.

埋葬我深情 2024-08-02 17:51:11

是的,但这需要一些反思。 您最好使用像 Snoop 这样的工具,它已经为您完成了艰巨的任务。

事件选项卡中,您可以看到事件列表以及处理该事件的元素。

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文