Продолжайте запускать приложение после события закрытия в WPF

#c# #wpf

#c# #wpf

Вопрос:

Я объявил событие закрытия для своего основного приложения Window.xaml . Там я спрашиваю пользователя через MessageBox , уверен ли он, что закроет приложение без сохранения или нет, но независимо от результата окна сообщения, мое приложение все равно завершает работу. В чем здесь проблема?

Код события закрытия:

 private void MetroWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
   var content = ((FrameworkElement)ReportGeneratorFrame.Content);
   var dataContext = (ReportGeneratorViewModel)content.DataContext;

   string msg = "Schließen ohne Zwischenspeichern?";

   MessageBoxResult result =
         MessageBox.Show(
            msg,
            "Speicherabfrage!",
            MessageBoxButton.YesNo,
            MessageBoxImage.Warning);

   if (result == MessageBoxResult.Yes)
   {
      // If user doesn't want to save, close Application
      System.Windows.Application.Current.Shutdown();
   }
   else
   {
      dataContext.SaveAllVariables();
   }
}
  

Ответ №1:

Вы должны установить Cancel свойство в CancelEventArgs на true , если хотите предотвратить закрытие.

 if (result == MessageBoxResult.No)
{
   e.Cancel = true;
   dataContext.SaveAllVariables();
} 
  

Значение по умолчанию для Cancel равно false , поэтому приложение все равно завершит работу при выходе из вашего обработчика, вам не нужно вызывать Shutdown(); .

Ответ №2:

Две вещи:

  • Чтобы отменить завершение работы, установите e.Cancel = true; и все.
  • Если вы согласны с его завершением, просто позвольте коду завершить метод без установки свойства Cancel. Нет необходимости вызывать Shutdown();