使用Mouse.Capture检测给定控件外部的单击

时间:2017-09-06 20:18:36

标签: c# wpf mousecapture

我在WPF项目中有一个TextBox,我试图在应用程序的任何地方检测鼠标,而不是在TextBox中。

这是我到目前为止的代码。

System.Windows.Input.MouseButtonEventHandler clickOutsideHandler;

public MyClass() {
    clickOutsideHandler = new System.Windows.Input.MouseButtonEventHandler(HandleClickOutsideOfControl);
}

private void StartCapture() {
    System.Windows.Input.Mouse.Capture(TextBox1, System.Windows.Input.CaptureMode.SubTree);
    AddHandler(System.Windows.Input.Mouse.PreviewMouseDownOutsideCapturedElementEvent, clickOutsideHandler, true);
}

private void HandleClickOutsideOfControl(object sender, System.Windows.Input.MouseButtonEventArgs e) {
    ReleaseMouseCapture();
    RemoveHandler(System.Windows.Input.Mouse.PreviewMouseDownOutsideCapturedElementEvent, clickOutsideHandler);
}

我遇到的问题是永远不会调用事件处理程序。我已经尝试捕获Capture()函数的返回值,但它显示为true。谁能告诉我我做错了什么?

1 个答案:

答案 0 :(得分:1)

您可以改为使用LostFocus / LostKeyboardFocus,但窗口上必须有另一个可以获得焦点的元素。

第二种方法可以更好地完成你的工作(但并没有完全有意义)将附加到全局鼠标。 Intercept every mouse click to WPF application

然后在那个人做一个测试并确定下面的内容。https://msdn.microsoft.com/en-us/library/ms608753(v=vs.110).aspx