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řít systé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 false
true
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é
.NET Desktop feedback