Закрытие окна WPF при ответе на двойной щелчок переносит двойной щелчок в главное окно

#wpf #window #double-click

#wpf #окно #двойной щелчок

Вопрос:

Я видел сообщения о подобных проблемах, но никогда не отвечал. Для меня это серьезная проблема.

У меня есть приложение WPF, которое открывает новое окно с помощью ShowDialog(). В новом окне у меня есть datagrid, но это может быть объект любого типа. Когда я обрабатываю событие doubleclick строки, я закрываю окно. На этом этапе окно закрывается, но элемент управления в главном окне непосредственно под тем местом, где я щелкнул, получает щелчки.

Я попытался обработать PreviewMouseButtonDown и искать clickcount = 2 вместо doubleclick, но это имело тот же эффект. Я попытался установить e.Handled = true, и это также имело тот же эффект. Я попытался установить владельца в окне и никаких изменений. Я пробовал как модальные, так и обычные окна, и никаких изменений. Я ответил на PreviewMouseButtonDown одним щелчком мыши, и это сработало, но мне абсолютно необходимо, чтобы это был двойной щелчок.

Ответ №1:

Проблема в том, что событие двойного щелчка срабатывает при 2-м событии нажатия мыши. Если вы закроете окно как часть этой обработки событий, вы все равно получите событие наведения курсора мыши в любом окне, открытом за диалогом.

Я думаю, что решением может быть установка флага во время обработки двойного щелчка и при наведении курсора мыши, если флаг установлен, закройте окно.

Ответ №2:

Хорошо, у меня была похожая проблема в нашем проекте, и она как-то связана. Мы так и не исправили это, но теперь я еще немного подумал. И я предполагаю, что из-за того, что вы закрываете окно во время обработки ввода, эта обработка ввода отменяется, ваше окно закрывается, но запрос на ввод по-прежнему остается (потому что он не обрабатывался ранее), поэтому ваше родительское окно получает его для обработки. Так что это, конечно, просто выстрел в темноте, но объясняет нашу проблему. Итак, чтобы дать решение: Вы могли бы вместо закрытия окна настроить задание диспетчера с использованием более низкого приоритета в качестве входных данных и просто закрыть окно там. Пользователь должен чувствовать то же самое, но должен использовать двойной щелчок.

Опять же, никаких гарантий, это просто звучит резонно в моей голове.

Удачи.