如何在不收听框架控件中定义的任何鼠标事件的情况下检测鼠标点击?

时间:2011-02-01 10:29:41

标签: c# wpf silverlight

是否可以在不收听框架控件中定义的任何鼠标事件的情况下检测鼠标点击?

我的意思是,我不想写代码如下:

  control.MouseLeftButtonDown += this.HandleMouseLeftButtonDown;

但我想知道用户是否点击了屏幕。是否可以在C#(WPF或Silverlight)中使用?

5 个答案:

答案 0 :(得分:8)

您可以在主窗口的静态构造函数中注册类处理程序,例如:

static MainWindow() {
    EventManager.RegisterClassHandler(typeof (MainWindow),
                                      Mouse.MouseDownEvent,
                                      new MouseButtonEventHandler(OnGlobaMouseDown));
}

它将是所有MouseDown事件的全局处理程序。

答案 1 :(得分:4)

您可以使用Win32 API并检测鼠标消息WM_MOUSE,如下所示:

http://support.microsoft.com/kb/318804

或此示例,显示使用全局鼠标消息WM_MOUSE_LL:

http://www.codeproject.com/KB/cs/globalhook.aspx

答案 2 :(得分:3)

这是通过捕获鼠标来完成的。这会强制任何鼠标事件指向您,即使它移动到窗口之外。 Mouse.Capture()方法。

答案 3 :(得分:1)

如果您需要处理所有应用程序的鼠标事件,最好的方法是订阅InputManager个事件。

答案 4 :(得分:0)

  

“我的意思是,我不想写代码如下:

     

control.MouseLeftButtonDown + = this.HandleMouseLeftButtonDown;“

您可以随时使用:

if (Mouse.LeftButton == MouseButtonState.Pressed)
{
     ...
}

你需要包括这个。

using System.Windows.Input;

这对我来说在wpf。