So schließen Sie ein Fenster oder Dialogfeld (WPF .NET)

Dieser Artikel erklärt die verschiedenen Möglichkeiten zum Schließen eines Fensters oder Dialogfelds. Ein Benutzer kann ein Fenster mithilfe der Elemente im Nicht-Clientbereich schließen, z. B. mit den folgenden:

  • Das Element Schließen im Menü System.
  • Drücken von ALT+F4.
  • Klicken auf die Schaltfläche Schließen.
  • Drücken Sie ESC, wenn für eine Schaltfläche die IsCancel-Eigenschaft in einem true modalen Fenster auf festgelegt ist.

Stellen Sie beim Entwerfen eines Fensters im Clientbereich weitere Mechanismen zum Schließen eines Fensters bereit. Einige der typischen Designelemente zum Schließen von Fenstern sind etwa:

  • Das Element Beenden im Menü Datei, i. d. R. für Hauptanwendungsfenster.
  • Das Element Schließen im Menü Datei, i. d. R. in einem sekundären Anwendungsfenster.
  • Das Element Abbrechen, i. d. R. in einem modalen Dialogfeld.
  • Das Element Schließen, i. d. R. in einem nicht modalen Dialogfeld.

Wichtig

Sobald ein Fenster geschlossen wurde, kann dieselbe Objektinstanz nicht zum Erneuten Öffnen des Fensters verwendet werden.

Weitere Informationen zur Lebensdauer eines Fensters finden Sie unter Übersicht über WPF-Fenster: Fensterlebensdauer.

Schließen eines modalen Fensters

Legen Sie beim Schließen eines Fensters, das mit der ShowDialog-Methode geöffnet wurde, die DialogResult-Eigenschaft entweder auf true oder false fest, um einen „akzeptierten“ oder „abgebrochenen“ Zustand anzugeben. Sobald ein Wert für die DialogResult-Eigenschaft festgelegt ist, wird das Fenster geschlossen. Das folgende Codebeispiel zeigt, wie die DialogResult-Eigenschaft festgelegt wird:

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

Sie können auch die Close-Methode aufrufen. Wenn die Close-Methode verwendet wird, wird die DialogResult-Eigenschaft auf false festgelegt.

Sobald ein Fenster geschlossen wurde, kann es mit derselben Objektinstanz nicht erneut geöffnet werden. Wenn Sie versuchen, dasselbe Fenster anzuzeigen, wird eine InvalidOperationException ausgelöst. Erstellen Sie stattdessen eine neue Instanz des Fensters, und öffnen Sie es.

Schließen eines nicht modalen Fensters

Verwenden Sie die Close-Methode zum Schließen eines Fensters, das mit der Show- Methode geöffnet wurde. Der folgende Code demonstriert das Schließen eines nicht modalen Fensters:

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

Schließen mit IsCancel

Die Button.IsCancel-Eigenschaft kann auf true gesetzt werden, um das Fenster beim Betätigen der ESC-Taste automatisch zu schließen. Dies funktioniert nur, wenn das Fenster mit ShowDialog-der Methode geöffnet wird.

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

Ausblenden eines Fensters

Anstatt ein Fenster zu schließen, kann es mit der Hide-Methode ausgeblendet werden. Ein ausgeblendetes Fenster kann erneut geöffnet werden, im Gegensatz zu einem Fenster, das geschlossen wurde. Wenn Sie eine Fensterobjektinstanz wiederverwenden möchten, blenden Sie das Fenster aus, anstatt es zu schließen. Der folgende Code veranschaulicht das Ausblenden eines Fensters:

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

Schließen und Ausblenden abbrechen

Wenn Sie Ihre Schaltflächen Fenster ausblenden anstatt sie zu schließen, können Benutzer dies weiterhin umgehen und das Fenster schließen. Der Eintrag Schließen im Systemmenü und die Schließen-Schaltfläche des Nicht-Clientbereichs des Fensters, schließen das Fenster, anstatt es auszublenden. Erwägen Sie dieses Szenario, wenn sie möchten, dass ein Fenster ausgeblendet wird, anstatt es zu schließen.

Achtung

Wenn ein Fenster modal mit ShowDialog angezeigt wird, wird die DialogResult-Eigenschaft auf null gesetzt, wenn dass das Fenster ausgeblendet wird. Sie müssen den Zustand dem aufrufenden Code zurückmelden, indem Sie dem Fenster ihre eigene Eigenschaft hinzufügen.

Wenn ein Fenster geschlossen wird, wird das Closing-Ereignis ausgelöst. Dem Handler wird eine CancelEventArgsübergeben, die die Cancel-Eigenschaft implementiert. Setzen Sie diese Eigenschaft auf true, um zu verhindern, dass ein Fenster geschlossen wird. Der folgende Code veranschaulicht, wie sie die Schließung abbrechen und stattdessen das Fenster ausblenden:

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

In manchen Fällen möchten Sie ein Fenster nicht ausblenden, sondern verhindern wollen, dass der Benutzer es schließt. Weitere Informationen finden Sie unter Übersicht über WPF-Fenster: Schließen des Fensters abbrechen.

Weitere Informationen