Использование Mouse.Capture для обнаружения щелчка за пределами данного элемента управления

У меня есть TextBox в проекте WPF, где я пытаюсь обнаружить щелчок мыши в любом месте приложения, кроме 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 ответ

Вместо этого вы можете использовать LostFocus / LostKeyboardFocus, но в окне должен быть еще один элемент, который может получить фокус.

Второй подход, который делает больше того, что вы, что именно (но не имеет общего смысла), заключался бы в присоединении к глобальной мышке вниз. Перехватывать каждый щелчок мыши в приложении WPF

затем сделайте тестирование и определите, что под ним. https://msdn.microsoft.com/en-us/library/ms608753(v=vs.110).aspx

Другие вопросы по тегам