#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();