Проблемы с фокусировкой модального диалога в приложении WPF - PullRequest
1 голос
/ 17 июня 2010

У меня проблема с моим wpf-приложением, когда за основным приложением появляется модальное диалоговое окно, вызывающее зависание.

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

Диалог является оконным элементом управления, который содержит введенный пользовательский контроль в качестве контекста данных.Чтобы установить владельца окна перед вызовом ShowDialog (), вместо Window.GetWindow (this) используется первое активное окно в приложении:


private static Window GetOwner()
{
    if (Application.Current != null)
    {
      var owner = Application.Current.Windows.Cast().FirstOrDefault(w => w.IsActive);
      return owner ?? Application.Current.MainWindow;
    }
    return null;
}

Есть идеи, что может вызывать эту проблему?или даже как попытаться отследить это, чтобы я мог собрать больше информации, когда это произойдет?

Спасибо, Донал

Ответы [ 2 ]

0 голосов
/ 23 мая 2017

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

Я добавил свой собственный метод ShowDialog () вмодальное окно, которое выглядело так:

    public bool? ShowDialog(Window owner)
    {
        Owner = owner;
        return ShowDialog();
    }

И я явно прошел в окно-владелец при его показе.Правильно установив свойство Owner, мои проблемы были исправлены.

Возможно, вы также не правильно установили свойство Owner?

0 голосов
/ 18 августа 2011

У меня была проблема с фокусом на приложении Windows Form, которое иногда переводилось в мерцающий эффект.причина была в том, что один из парней изменил код для скрытия модального окна до тех пор, пока его не показывали, чтобы избежать уродливого темного пятна!Так как он вызвал .Hide () в самом верхнем модальном окне, фокус переместился на другое приложение, и когда он вызвал .Show (), когда окно полностью загрузилось, оно сфокусировалось с помощью outoffocus & или мерцания.

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

...