Почему незагруженное событие окна не срабатывает в WPF? - PullRequest
7 голосов
/ 18 января 2012

В моем приложении WPF я создал окно и показываю его как диалог, вызывая его методом ShowDialog (). Но когда я закрываю окно методом Close (), событие Unloaded не запускается для этого диалогового окна.

MyWindow obj = new MyWindow(); 
obj.ShowDialog();
obj.Close();

Ответы [ 2 ]

11 голосов
/ 18 января 2012

Это известная проблема.

Используйте это вместо

   yourWindow.Dispatcher.ShutdownStarted += Dispatcher_ShutdownStarted;

   private void Dispatcher_ShutdownStarted( object sender, EventArgs e )
   {
       //do what you want to do on closing
   }

Читать это для получения более подробной информации

Редактировать

Если указано вышене работает попробуйте это

yourWindow.Closing += new CancelEventHandler(YourWindow_Closing);

void YourWindow_Closing(object sender, CancelEventArgs e)
{

}
2 голосов
/ 16 января 2018

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

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

Закрытие мероприятий

Когда окно закрывается, оно вызывает два события: Закрытие и Закрытие .

Закрытие поднимается до закрытия окна, и оно обеспечивает механизм, с помощью которого можно предотвратить закрытие окна. Одна общая причина чтобы предотвратить закрытие окна, если содержимое окна содержит измененные данные. В этой ситуации событие закрытия может быть обработано для определения загрязнены ли данные и, если да, спросить пользователя продолжить закрытие окна без сохранения данных или отменить закрытие окна В следующем примере показаны ключевые аспекты Закрытие обработки.

Далее больше

Обработчику события Closing передается объект CancelEventArgs, который реализует свойство BooleanCancel, которое вы установили в true, чтобы предотвратить окно закрывается. +

Если закрытие не обрабатывается или обрабатывается, но не отменяется, Окно закроется. Непосредственно перед тем, как окно действительно закрывается, поднял. На этом этапе нельзя предотвратить закрытие окна.

Примечание

Хотя окно может быть явно закрыто с помощью механизмов, предоставленных в в не-клиентской и клиентской областях окно также может быть неявно закрыто в результате поведения в других частях приложения или Windows, в том числе:

  • Пользователь выходит из системы или закрывает Windows.

  • Владелец окна закрывается.

  • Главное окно приложения закрывается, а ShutdownMode имеет значение OnMainWindowClose.

  • Выключение вызывается.

Все события жизни окна

На следующем рисунке показана последовательность основных событий за время жизни окна.

enter image description here

На следующем рисунке показана последовательность основных событий в течение времени жизни окна, которое отображается без активации (ShowActivation устанавливается в значение false перед отображением окна).

enter image description here

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