WPF Dialog не модальный? - PullRequest
       16

WPF Dialog не модальный?

1 голос
/ 21 июня 2011

У меня есть окно, которое я показываю, отправляя вызов ShowDialog () в потоке пользовательского интерфейса (я в другом потоке):

myMainWindowDispatcher.BeginInvoke(new Func<bool?>(myDialog.ShowDialog));

Владельцу myDialog было присвоено значение myMainWindow.Когда диалоговое окно показывает, что оно правильно всегда вверху, я могу взаимодействовать с окном позади!(победить цель сделать его модальным, что требуется).Раньше я делал то же самое, т.е. отправлял вызов из другого потока, и он работал, т.е. был модальным.Теперь я не могу понять, почему это не так.Я не могу вставить весь свой код проекта сюда - вы можете придумать что-нибудь, что сделало бы Окно немодальным ??

1 Ответ

0 голосов
/ 21 июня 2011

Интересно: я выкопал резервную копию и нашел причину:

Перед этим открывается еще одно диалоговое окно, окно которого отображается с помощью ShowDialog, диалог A, затем поверх него отображается это диалоговое окно, диалог B,Когда диалог B загружен, я теперь скрываю диалог A, Window.Hide (), а затем показываю его снова, когда диалог B закрывается. Это скрытие диалога A каким-то образом делает другие окна позади диалога B снова интерактивными для пользователя, в то время как диалог B открыт!

Я предполагаю, что причина в том, что одновременное отображение нескольких диалогов необычный, и когда я прячу один из них, WPF думает, что он может снова включить другую Windows. Но это только мое предположение!

Решение состоит в том, чтобы вместо того, чтобы скрывать, сделать очень маленький другой диалог (ПРИМЕЧАНИЕ: настройка Visibilityдля Hidden имеет тот же результат, что и вызов Hide ()):

    public void HideDialog()
    {
        myDialogA.SizeToContent = SizeToContent.Manual;
        myDialogA.Height = 0;
        myDialogA.Width = 0;
    }

    public void UnHideDialog()
    {
        myDialogA.SizeToContent = SizeToContent.WidthAndHeight;
    }

(Бизнес-требование для показа нескольких диалогов выходит за рамки этого вопроса, прежде чем меня вызовут злой каневил для использования модальных окон, ине имеет значения, если вам интересно, как можно отобразить несколько диалогов, см. здесь: Безопасно ли отображать несколько диалогов в WPF? )

...