Wenn der Benutzer die Anwendung schließt, muss eine Save-File-Message angezeigt werden (um sicher zu sein, dass er die Änderungen der bearbeiteten Dateien verwerfen möchte).ShowDialog in Closing-Event
dies zu implementieren, ich habe ein menuitem mit einer Befehlsbindung (ohne Schlüssel-Geste):
private void Command_Exit(object sender, ExecutedRoutedEventArgs e)
{
Application.Current.Shutdown();
}
das Hauptfenster ein Schließereignis hat. In diesem Fall überprüfe ich, ob dort nicht gespeicherte Dateien vorhanden sind. wenn ja, der Savedialog geöffnet werden muss (wählen, die Dateien gespeichert werden):
private void Window_Closing(object sender, CancelEventArgs e)
{
if (sdl.Count() > 0)
{
SaveDialog sd = new SaveDialog();
IEnumerable<Doc> close = sd.ShowDialog(this);
if (close == null)
e.Cancel = true;
else
foreach (Doc document in close)
document.Save();
}
}
in dieser Showdialog-Methode (implementiert in meiner Savedialog-Klasse) i nennen
bool? ret = ShowDialog();
if (!ret.HasValue)
return null;
if (!ret.Value)
return null;
Das Problem ist:
Wenn ich die Alt + F4-Verknüpfung verwende, um die Anwendung zu schließen (Standard-Verhalten des Hauptfensters) funktioniert es und ich bekomme den gespeicherten, wenn es nicht gespeicherte Dateien gibt. aber wenn ich die Anwendung zu schließen, indem die Command_Exit-Methode ausgeführt wird, die Methode-Aufruf
bool? ret = ShowDialog();
kehrt null und der Dialog wird nicht angezeigt.
Wenn ich die Alt + F4 KeyGesture der CommandBinding zuweisen, wird das Problem umgeschaltet: Ausführen von Command_Exit funktioniert gut, aber Alt + F4 Shortcut nicht.
Warum funktioniert die ShowDialog() - Methode nicht in beiden Fällen und wie kann man sie beheben?
Wie kann ein Fenster geschlossen werden? Nicht nur interaktiv. – Jodrell