WPF скрывает окно в событии закрытия, предотвращая завершение работы приложения - PullRequest
3 голосов
/ 19 января 2011

Опять простой вопрос.

Я использую окно в WPF в качестве дочернего окна, где я предпочел бы, чтобы кнопка 'X' скрывала окно вместо закрытия.Для этого у меня есть:

private void Window_Closing(object sender, CancelEventArgs e) {
   this.Hide();
   e.Cancel = true;
}

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

Есть ли чистый способ справиться с этим?Я думал о добавлении флага Kill ко всем моим пользовательским элементам управления (окнам):

public bool KillMe;

private void Window_Loaded(object sender, RoutedEventArgs e){
   KillMe = false;
}

private void Window_Closing(object sender, CancelEventArgs e) {
   this.Hide();
   if (!KillMe) e.Cancel = true;
}

Затем в MainWindow_Closing () мне нужно было бы установить все флажки окна KillMe в true.

Что-нибудь лучшечем создать дополнительные флаги и забыть установить их перед закрытием?

Ответы [ 3 ]

8 голосов
/ 19 января 2011

Вы можете вызвать Завершение работы в обработчике закрытия "родителя" ... Это приведет к игнорированию отмены.

Из Window.Closing :

Если вызывается Shutdown, вызывается событие Closing для каждого окна.Однако, если закрытие отменено, отмена игнорируется.

2 голосов
/ 19 января 2011

У меня обычно есть свой AppGeneral статический класс для таких случаев. Когда я действительно выхожу из приложения, я устанавливаю AppGeneral.IsClosing static bool в true. А потом, при закрытии:

private void Window_Closing(object sender, CancelEventArgs e) {
if (!AppGeneral.IsClosing)   
   { 
     this.Hide();
     e.Cancel = true;
   }
}

Кроме того, вы можете убить свой собственный процесс (это уродливо, но работает :)) Process.GetCurrentProcess().Kill();

1 голос
/ 09 февраля 2013

Вы должны использовать

Application.Current.Shutdown();

в вашем методе закрытия главного окна.

Это должно отменять отмену любого подокна!

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