Что происходит с окном WPF после его закрытия? - PullRequest
6 голосов
/ 02 мая 2011

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

if (mesareaderThreadQueWin == null)
{
    mesareaderThreadQueWin = new MesaReaderThreadQueWindow();    
}

mesareaderThreadQueWin.Show(); 

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

Интересно, что именно происходитВот.Окно не null , иначе код просто создаст новый экземпляр, но так как я уже показал окно, кажется, что я не могу сделать это снова.Таким образом, окно должно быть в каком-то промежуточном состоянии.Невозможно стать видимым, но не null .

Могу ли я обнаружить это состояние?Есть способ снова использовать это окно, не закрывая его вообще и используя hide вместо?

Ответы [ 2 ]

4 голосов
/ 02 мая 2011

Могу ли я обнаружить это состояние?

Насколько я знаю, нет способа получить доступ к этому состоянию

Его есть способ использовать повторноопять это окно, кроме того, чтобы вообще не закрывать окно и использовать вместо него hide?

Да, обработать событие Closing в диалоговом окне или переопределить метод OnClosing:

protected override void OnClosing(CancelEventArgs e)
{
    e.Cancel = true;
    this.Hide();
}
1 голос
/ 02 мая 2011

Вы можете обработать событие Closing, отменить его, а затем скрыть окно:

window.Closing += delegate(object sender, CancelEventArgs e)
{
    e.Cancel = true;
    window.Hide();
};

Это гарантирует, что Window никогда не закроется, и позволит вам вызвать Show() любое количество раз.

Это, вероятно, избыточно, учитывая вышеизложенное, но вы можете определить, когда ваш Window закрыт, подключившись к событию Closed и установив там флаг.То есть сохраняйте собственную переменную isClosed.

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