Закрытие окна WPF при ответе на двойной клик переводит двойной клик в главное окно - PullRequest
4 голосов
/ 06 октября 2011

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

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

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

Ответы [ 2 ]

0 голосов
/ 15 января 2015

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

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

0 голосов
/ 06 октября 2011

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

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

Удачи.

...