11

我希望拦截我的 WPF 应用程序中的每一次鼠标点击。使用命令路由机制似乎应该很容易,但抱歉我什么也没找到。

我的应用程序实现了多个安全级别,并且如果在 x 分钟内没有人与应用程序交互(单击),则需要自动恢复到最严格的级别。我的计划是添加一个在 x 分钟后到期的计时器并调整安全级别。每次鼠标点击应用程序都会重置计时器。

4

3 回答 3

24

您可以注册一个类处理程序:

public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            EventManager.RegisterClassHandler(typeof(Window), Window.PreviewMouseDownEvent, new MouseButtonEventHandler(OnPreviewMouseDown));

            base.OnStartup(e);
        }

        static void OnPreviewMouseDown(object sender, MouseButtonEventArgs e)
        {
            Trace.WriteLine("Clicked!!");
        }
    }

这将处理PreviewMouseDown在应用程序中创建的任何窗口上的任何事件。

于 2012-11-05T13:23:25.543 回答
3
<Window .... PreviewMouseDown="Window_PreviewMouseDown_1">
</Window>

这应该适合你。

即使MouseDown它包含的组件触发了其他事件,它也会触发。

根据评论中的 Clemens 建议,PreviewMouseDown是比 更好的选择MouseDown,因为这样可以确保您无法阻止事件冒泡在不同的事件中发生。

于 2012-11-05T13:07:12.460 回答
0

你有几个选择:

低级鼠标钩子: http://filipandersson.multiply.com/journal/item/7?&show_interstitial=1& u=%2Fjournal%2Fitem

WPF 解决方案(我会先检查一下这是否满足您的需求): WPF。捕捉最后一个窗口点击任意位置

于 2012-11-05T13:07:08.357 回答