#wpf #window #double-click
#wpf #окно #двойной щелчок
Вопрос:
Я видел сообщения о подобных проблемах, но никогда не отвечал. Для меня это серьезная проблема.
У меня есть приложение WPF, которое открывает новое окно с помощью ShowDialog(). В новом окне у меня есть datagrid, но это может быть объект любого типа. Когда я обрабатываю событие doubleclick строки, я закрываю окно. На этом этапе окно закрывается, но элемент управления в главном окне непосредственно под тем местом, где я щелкнул, получает щелчки.
Я попытался обработать PreviewMouseButtonDown и искать clickcount = 2 вместо doubleclick, но это имело тот же эффект. Я попытался установить e.Handled = true, и это также имело тот же эффект. Я попытался установить владельца в окне и никаких изменений. Я пробовал как модальные, так и обычные окна, и никаких изменений. Я ответил на PreviewMouseButtonDown одним щелчком мыши, и это сработало, но мне абсолютно необходимо, чтобы это был двойной щелчок.
Ответ №1:
Проблема в том, что событие двойного щелчка срабатывает при 2-м событии нажатия мыши. Если вы закроете окно как часть этой обработки событий, вы все равно получите событие наведения курсора мыши в любом окне, открытом за диалогом.
Я думаю, что решением может быть установка флага во время обработки двойного щелчка и при наведении курсора мыши, если флаг установлен, закройте окно.
Ответ №2:
Хорошо, у меня была похожая проблема в нашем проекте, и она как-то связана. Мы так и не исправили это, но теперь я еще немного подумал. И я предполагаю, что из-за того, что вы закрываете окно во время обработки ввода, эта обработка ввода отменяется, ваше окно закрывается, но запрос на ввод по-прежнему остается (потому что он не обрабатывался ранее), поэтому ваше родительское окно получает его для обработки. Так что это, конечно, просто выстрел в темноте, но объясняет нашу проблему. Итак, чтобы дать решение: Вы могли бы вместо закрытия окна настроить задание диспетчера с использованием более низкого приоритета в качестве входных данных и просто закрыть окно там. Пользователь должен чувствовать то же самое, но должен использовать двойной щелчок.
Опять же, никаких гарантий, это просто звучит резонно в моей голове.
Удачи.