0

我在 WPF 项目中有一个文本框,我试图检测鼠标单击应用程序上除文本框以外的任何位置。

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

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。谁能告诉我我做错了什么?

4

1 回答 1

1

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

第二种方法可以更准确地(但并不完全有意义)将附加到全局鼠标。拦截每一次鼠标点击到 WPF 应用程序

然后在那一个上做一个hittest并确定下面是什么。https://msdn.microsoft.com/en-us/library/ms608753(v=vs.110).aspx

于 2017-09-06T21:28:42.560 回答