首页 > 解决方案 > 如何挂钩事件或 WPF 应用程序中窗口的更改?

问题描述

大家,希望你们一切都好。这是要求:我有一个 C# WPF 应用程序,我想跟踪这个应用程序中的事件。

不是母语,见谅。谢谢你。

我在“ https://github.com/justcoding121/Windows-User-Action-Hook ”上找到了一个鼠标挂钩,但它可以挂钩全局事件而不是应用程序中的事件。

此挂钩无法挂钩 WPF 应用程序中的事件。

标签: c#

解决方案


在我们得到答案之前,您需要注意两件事:

1)在 WPF 中,除了窗口本身之外的所有东西都是人工的——所有 UI 元素都是通过 DirectX 而不是操作系统绘制的(这就是为什么,例如,在 WPF 中,您可以将一个按钮放入另一个按钮,但在 Windows 窗体中,您可以't)。因此,操作系统无法以某种方式了解应用程序中的鼠标事件。

2) WPF 中的几乎所有事件都是路由的——这意味着,当一个控件触发一个事件时,它实际上可以在多个位置进行处理,通常是首先在该控件上,然后向上到树并包括窗口。控件向上(或向下)树将触发此事件,即使它没有在它们上声明(如 Click 未在窗口上声明,但窗口仍可以间接响应自身内部的点击)。

顺便说一句,您可以正常使用事件(例如,this.MouseMove += MyHandler; 在窗口构造函数中或 <Window MouseDown="DownHandler" ...> 在 XAML 中)或通过路由事件语法(this .AddHandler(Button.ClickEvent, MyHandler); 在 C# 中或 <Window Button.Click="ClickHandler" ...> 在 XAML 中)。后者通常仅在您处理未在元素上声明的事件时才需要(例如单击窗口)。


推荐阅读