C# WPF: Разворачивание диалоговых окон поверх главного при открытии

У меня в программе имеется доп. окно. Его я открываю как диалоговое:

DialogWindow dialog = new DialogWindow();
dialog.ShowDialog();

Все отлично, как и задумано - пользователь не может взаимодействовать с главным окном пока открыто диалоговое, но есть одно НО:

Если свернуть оба окна, то при необходимости развернуть их обратно, при наведении на иконку программы на панели задач пользователь увидит 2 окна на выбор - главное и диалоговое.

Он может по каким-то причинам нажать на главное и оно откроется, но он не сможет с ним взаимодействовать. Придется снова наводиться на иконку приложения на панели задач и выбирать диалоговое, чтобы оно развернулось.


Здесь у меня 2 решения в голове:

  1. Скрывать главное окно с панели задач, вызывая у него свойство ShowInTaskbar = false;. Это по сути то, что мне нужно, но в этом случае окно исчезает на пару миллисекунд, что выглядит не очень красиво при открытии диалога.
  2. Как-то заставить диалоговое окно автоматически разворачиваться при открытии главного. Но можно ли это сделать - я не знаю.

Подскажите, есть ли еще какие-то способы?


Ответы (1 шт):

Автор решения: denisnumb

Ответ написан на основе совета Blackmeser, спасибо.

В классе главного окна добавил объект диалогового:

private Window currentDialog = null;

При открытии диалогового окна, currentDialog принимает значение открытого окна:

DialogWindow dialog = new DialogWindow();
currentDialog = dialog;
dialog.ShowDialog();
currentDialog = null;

При закрытии - снова null.

Добавил триггер, срабатывающий при получении фокуса главным окном:

Activated += OnFocus;

И сам метод OnFocus:

private void OnFocus(object sender, EventArgs e)
{
    if (currentDialog != null)
    {
        try
        {
            currentDialog.Activate();
        }
        catch { }
    }
}

Готово! Теперь при разворачивании главного окна, если есть диалоговое, то оно открывается поверх главного

→ Ссылка