Установка UIaccess, изменяющего поведение ShowDialog - PullRequest
0 голосов
/ 17 мая 2018

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

Это модальное диалоговое окно запускается через ShowDialog() и ведет себя, как и ожидалось - диалоговое окно запускается успешно, отображается перед приглашением входа в систему, которое его породило (я проверил в отладчике, что Owner устанавливаетсяправильно к приглашению входа в систему), и пользователь не может щелкнуть обратно в диалоговом окне входа в систему, пока предупреждение не будет адресовано.

В качестве части внешнего требования у нас есть исполняемый файл альтернативного модуля запуска, который устанавливает атрибут UIaccessв файле манифеста до true.Мне лично не нравится это поведение, но из-за требований бизнеса его нельзя удалить.Кроме различий в файле манифеста, обычный лаунчер и эта альтернативная версия запускают точно такой же код, те же самые библиотеки DLL и т. Д.

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

Хотя мы смогли решить эту проблему, добавив проверку в конструктор модального диалогового окна, которое выглядит следующим образом (диалоговое окно входа в систему всегда установлено на Topmost=true, это условие гарантирует, что другие диалоговые окнаодин и тот же тип не обязательно Topmost):

if (owner != null && owner.Topmost)
    Topmost = true;

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

Корень вопроса: почему UIAccessатрибут изменить поведение ShowDialog() таким образом?Если и диалоговое окно, и модальное окно находятся в одном потоке, почему их относительные позиции должны быть изменены установкой UIAccess для всего приложения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...