Si el usuario cierra la aplicación, se debe mostrar un archivo de guardar-mensaje (para asegurarse de que desea descartar los cambios de los archivos editados).ShowDialog en el evento de cierre
Para implementar esto, tengo un elemento de menú con un comando de unión (sin clave en gestos):
private void Command_Exit(object sender, ExecutedRoutedEventArgs e)
{
Application.Current.Shutdown();
}
la MainWindow tiene un cierre del evento. en este caso, verifico si hay archivos no guardados. En caso afirmativo, el SaveDialog tiene que ser abierto (a elegir, qué archivos tienen que ser guardado):
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();
}
}
en este ShowDialog-Método (implementado en mi SaveDialog-Class) que llamo
bool? ret = ShowDialog();
if (!ret.HasValue)
return null;
if (!ret.Value)
return null;
El problema es:
Si uso el atajo Alt + F4 para cerrar la aplicación (comportamiento predeterminado de la ventana principal) funciona y obtengo el archivo de registro de guardado si hay archivos no guardados. pero si cierro la aplicación mediante la ejecución del Command_Exit-método, el método Call-
bool? ret = ShowDialog();
vuelve nula y no aparece el cuadro de diálogo.
Si asigno Alt + F4 KeyGesture a CommandBinding, el problema se cambia: Ejecutar Command_Exit funciona bien pero Alt + F4 Shortcut not.
¿Cuál es la razón por la que el método ShowDialog() funciona no en ambos casos y cómo solucionarlo?
¿De qué maneras se puede cerrar una ventana? No solo interactivamente – Jodrell