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

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

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

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


person Frank    schedule 06.10.2011    source источник


Ответы (2)


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

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

person JohnL4    schedule 15.01.2015

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

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

Удачи.

person dowhilefor    schedule 06.10.2011