So mache ich meine:
// Any control that causes the Window.Closing even to trigger.
private void MenuItemExit_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
// Method to handle the Window.Closing event.
private void Window_Closing(object sender, CancelEventArgs e)
{
var response = MessageBox.Show("Do you really want to exit?", "Exiting...",
MessageBoxButton.YesNo, MessageBoxImage.Exclamation);
if (response == MessageBoxResult.No)
{
e.Cancel = true;
}
else
{
Application.Current.Shutdown();
}
}
Ich rufe nur Application.Current.ShutDown()
aus dem Hauptanwendungsfenster an, alle anderen Fenster verwenden this.Close()
. Behandelt in meinem Hauptfenster Window_Closing(...)
die x
Schaltfläche oben rechts . Wenn eine der Methoden einen Fensterschließer erfordert, wird Window_Closing(...)
das Ereignis zum Herunterfahren abgerufen, wenn der Benutzer dies bestätigt.
Der Grund, den ich tatsächlich Application.Current.Shutdown()
in meinem Hauptfenster verwende, ist, dass ich festgestellt habe, dass, wenn ein Designfehler gemacht wurde und ich kein übergeordnetes Element eines meiner Fenster in einer Anwendung deklariert habe, dieses Fenster geöffnet wird, ohne vorher angezeigt zu werden Bis zum letzten aktiven Schließen des Fensters bleibt im Hintergrund ein verstecktes Fenster. Die Anwendung wird nicht heruntergefahren. Die einzige Möglichkeit, einen vollständigen Speicherverlust zu verhindern, besteht darin, dass ich in den Task-Manager gehe , um die Anwendung herunterzufahren. Application.Current.Shutdown()
schützt mich vor unbeabsichtigten Designfehlern.
Das ist aus meiner persönlichen Erfahrung. Verwenden Sie am Ende das Beste für Ihr Szenario. Dies ist nur eine weitere Information.