Sdílet prostřednictvím


Jak zavřít okno nebo dialogové okno (WPF .NET)

V tomto článku se dozvíte o různých způsobech zavření okna nebo dialogového okna. Uživatel může okno zavřít pomocí prvků v oblasti, která není klientem, včetně následujících:

  • Položka Zavřítsystémové nabídky.
  • Stisknutí kláves ALT + F4.
  • Stisknutí tlačítka Zavřít.
  • Stisknutí klávesy ESC, když je pro tlačítko v modálním okně nastavena vlastnost IsCancel na true.

Při návrhu okna poskytněte klientovi více mechanismů pro zavření okna. Mezi běžné prvky návrhu v okně, které se používají k zavření, patří následující:

  • Položka Ukončit v nabídce Soubor, obvykle pro hlavní okna aplikace.
  • Položka Zavřít v nabídce Soubor, obvykle v sekundárním okně aplikace.
  • Tlačítko Zrušit, obvykle v modálním dialogovém okně.
  • Tlačítko Zavřít, obvykle v nemodálním dialogovém okně.

Důležité

Po zavření okna nelze stejnou instanci objektu použít k opětovnému otevření okna.

Další informace o životnosti okna naleznete v tématu Přehled oken WPF: Životnost okna.

Zavření modálního okna

Při zavření okna, které bylo otevřeno pomocí ShowDialog metody, nastavte DialogResult vlastnost buď buď nebo falsetrue naznačovat "akceptovaný" nebo "zrušený" stav, v uvedeném pořadí. Jakmile DialogResult je vlastnost nastavena na hodnotu, okno se zavře. Následující kód ukazuje nastavení DialogResult vlastnosti:

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

Můžete také volat metodu Close . Close Pokud je použita metoda, DialogResult vlastnost je nastavena na false.

Po zavření okna se nedá znovu otevřít se stejnou instancí objektu. Pokud se pokusíte zobrazit stejné okno, InvalidOperationException je vyvolán. Místo toho vytvořte novou instanci okna a otevřete ji.

Zavření okna bez režimu

Při zavření okna otevřeného pomocí Show metody použijte metodu Close . Následující kód ukazuje zavření bezmodální okno:

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

Close with IsCancel

Vlastnost Button.IsCancel lze nastavit tak, aby true se klávesa ESC automaticky zavřela. To funguje pouze při otevření okna s metodou ShowDialog .

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

Skrytí okna

Místo zavření okna může být okno s metodou skryto Hide . Skryté okno lze znovu otevřít, na rozdíl od zavřeného okna. Pokud budete znovu používat instanci objektu okna, místo zavření okna okno skryjte. Následující kód ukazuje skrytí okna:

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

Zrušit zavření a skrytí

Pokud jste tlačítka navrhli tak, aby místo zavření skrývala okno, může ho uživatel přesto obejít a okno zavřít. Položka Zavřít v systémové nabídce a tlačítko Zavřít v oblasti okna, která není klientem, zavře okno místo skrytí. Tento scénář zvažte, pokud je vaším záměrem skrýt okno místo jeho zavření.

Upozornění

Pokud se okno zobrazuje modálně s ShowDialog, DialogResult vlastnost bude nastavena na null , když je okno skryté. Stav budete muset sdělit zpět volajícímu kódu tak, že do okna přidáte vlastní vlastnost.

Při zavření Closing okna se vyvolá událost. Obslužná rutina je předána , CancelEventArgskterá implementuje Cancel vlastnost. Nastavte vlastnost tak, aby true se zabránilo zavření okna. Následující kód ukazuje, jak zrušit uzavření a místo toho skrýt okno:

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

Někdy může docházet k tomu, že nechcete okno skrýt, ale ve skutečnosti zabráníte tomu, aby ho uživatel zavřel. Další informace naleznete v tématu Přehled oken WPF: Zrušení uzavření okna.

Viz také