Compartir a través de


Cómo cerrar una ventana o un cuadro de diálogo (WPF .NET)

En este artículo obtendrá información sobre las distintas formas de cerrar una ventana o un cuadro de diálogo. Los usuarios pueden cerrar una ventana mediante elementos del área distinta del cliente, entre los que cabe incluir los siguientes:

  • El elemento Cerrar del menú Sistema.
  • Presionar ALT + F4.
  • Presionar el botón Cerrar.
  • Presionar ESC cuando un botón tiene la propiedad establecida IsCancel en true en una ventana modal.

Al diseñar una ventana, proporcione más mecanismos al área cliente para cerrar una ventana. Algunos de los elementos de diseño comunes de una ventana que se usan para cerrarla incluyen los siguientes:

  • Un elemento Salir en el menú Archivo, normalmente para las ventanas de la aplicación principal.
  • Un elemento Cerrar en el menú Archivo, normalmente para las ventanas de una aplicación secundaria.
  • Un botón Cancelar, normalmente en un cuadro de diálogo modal.
  • Un botón Cerrar, normalmente en un cuadro de diálogo sin modo.

Importante

Una vez cerrada una ventana, no se puede usar la misma instancia de objeto para volver a abrir la ventana.

Para obtener más información sobre la duración de una ventana, consulte Información general sobre las ventanas de WPF: duración de la ventana.

Cerrar una ventana modal

Al cerrar una ventana que se ha abierto con el método ShowDialog, establezca la propiedad DialogResult en true o false para indicar un estado «aceptado» o «cancelado», respectivamente. Tan pronto como la propiedad DialogResult se establece en un valor, la ventana se cierra. El siguiente ejemplo de código demuestra cómo establecer la propiedad DialogResult:

private void okButton_Click(object sender, RoutedEventArgs e) =>
    DialogResult = true;

private void cancelButton_Click(object sender, RoutedEventArgs e) =>
    DialogResult = false;
Private Sub okButton_Click(sender As Object, e As RoutedEventArgs)
    DialogResult = True
End Sub

Private Sub cancelButton_Click(sender As Object, e As RoutedEventArgs)
    DialogResult = False
End Sub

También se puede llamar al método Close. Si se usa el método Close, la propiedad DialogResult se establece en false.

Una vez cerrada una ventana, no se puede volver a abrir con la misma instancia de objeto. Si intenta mostrar la misma ventana, se inicia una excepción InvalidOperationException. En su lugar, cree una nueva instancia de la ventana y ábrala.

Cerrar una ventana sin modo

Cuando cierre una ventana que se ha abierto con el método Show, use el método Close. En el código siguiente se muestra cómo cerrar una ventana sin modo:

private void closeButton_Click(object sender, RoutedEventArgs e) =>
    Close();
Private Sub closeButton_Click(sender As Object, e As RoutedEventArgs)
    Close()
End Sub

Cerrar con IsCancel

La propiedad Button.IsCancel se puede establecer en true para permitir que la tecla ESC cierre automáticamente la ventana. Esto solo funciona cuando se abre la ventana con el método ShowDialog.

<Button Name="cancelButton" IsCancel="True">Cancel</Button>

Ocultar una ventana

En lugar de cerrar una ventana, se puede ocultar una ventana con el método Hide. Se puede volver a abrir una ventana oculta, a diferencia de una ventana cerrada. Si va a reutilizar una instancia de objeto de ventana, oculte la ventana en lugar de cerrarla. En el código siguiente se muestra cómo ocultar una ventana:

private void saveButton_Click(object sender, RoutedEventArgs e) =>
    Hide();
Private Sub saveButton_Click(sender As Object, e As RoutedEventArgs)
    Hide()
End Sub

Cancelar cerrar y ocultar

Si ha diseñado los botones para ocultar una ventana en lugar de cerrarla, el usuario puede omitir esta ventana y cerrar la ventana. El elemento Cerrar del menú del sistema y el botón Cerrar del área de la ventana que no es cliente cerrarán la ventana en lugar de ocultarla. Tenga en cuenta este escenario cuando tenga la intención de ocultar una ventana en lugar de cerrarla.

Precaución

Si se muestra una ventana de forma modal con ShowDialog, la propiedad DialogResult se establecerá en null cuando la ventana esté oculta. Tendrá que volver a comunicar el estado al código de llamada agregando su propia propiedad a la ventana.

Cuando se cierra una ventana, se genera el evento Closing. Al controlador se le pasa CancelEventArgs un, que implementa la propiedad Cancel. Establezca esa propiedad en true para impedir que se cierre una ventana. En el código siguiente se muestra cómo cancelar el cierre y, en su lugar, ocultar la ventana:

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
    // Cancel the closure
    e.Cancel = true;

    // Hide the window
    Hide();
}
Private Sub Window_Closing(sender As Object, e As ComponentModel.CancelEventArgs)
    ' Cancel the closure
    e.Cancel = True

    ' Hide the window
    Hide()
End Sub

Puede haber ocasiones en las que no quiera ocultar una ventana, pero evitar que el usuario la cierre. Para obtener más información, vea Información general sobre las ventanas de WPF: cancelar el cierre de ventanas.

Vea también