Jak zamknąć okno lub okno dialogowe (WPF .NET)
W tym artykule poznasz różne sposoby zamykania okna lub okna dialogowego. Użytkownik może zamknąć okno przy użyciu elementów w obszarze niekliencką, w tym następujących elementów:
- Element Zamknij menu System.
- Naciśnięcie klawiszy ALT + F4.
- Naciśnięcie przycisku Zamknij.
- Naciśnięcie klawisza ESC, gdy przycisk ma dla właściwości IsCancel ustawioną wartość
true
w oknie modalnym.
Podczas projektowania okna podaj więcej mechanizmów dla obszaru klienta, aby zamknąć okno. Niektóre typowe elementy projektu w oknie, które są używane do jego zamknięcia, obejmują następujące elementy:
- Element Zakończ w menu Plik, zwykle w przypadku głównych okien aplikacji.
- Element Zamknij w menu Plik, zwykle w pomocniczym oknie aplikacji.
- Przycisk Anuluj, zwykle w modalnym oknie dialogowym.
- Przycisk Zamknij, zwykle w niemodalnym oknie dialogowym.
Ważne
Po zamknięciu okna nie można użyć tego samego wystąpienia obiektu do ponownego otwarcia okna.
Aby uzyskać więcej informacji na temat okresu istnienia okna, zobacz Omówienie okien WPF: okres istnienia okna.
Zamykanie modalnego okna
Podczas zamykania okna, które zostało otwarte za ShowDialog pomocą metody, ustaw DialogResult właściwość na true
wartość lub false
, aby wskazać odpowiednio stan "zaakceptowane" lub "anulowane". Gdy tylko DialogResult
właściwość zostanie ustawiona na wartość, okno zostanie zamknięte. Poniższy kod demonstruje ustawienie DialogResult
właściwości :
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
Możesz również wywołać metodę Close .
Close
Jeśli jest używana metoda, właściwość jest ustawiona DialogResult na false
wartość .
Po zamknięciu okna nie można go ponownie otworzyć za pomocą tego samego wystąpienia obiektu. Jeśli spróbujesz wyświetlić to samo okno, zostanie zgłoszony element InvalidOperationException . Zamiast tego utwórz nowe wystąpienie okna i otwórz je.
Zamykanie okna bez moderowania
Podczas zamykania okna, które zostało otwarte za Show pomocą metody , użyj Close metody . Poniższy kod demonstruje zamknięcie okna bez moderowania:
private void closeButton_Click(object sender, RoutedEventArgs e) =>
Close();
Private Sub closeButton_Click(sender As Object, e As RoutedEventArgs)
Close()
End Sub
Zamknij za pomocą funkcji IsCancel
Właściwość Button.IsCancel można ustawić tak true
, aby umożliwić automatyczne zamykanie okna za pomocą klucza ESC . To działa tylko wtedy, gdy okno jest otwarte za pomocą ShowDialog metody .
<Button Name="cancelButton" IsCancel="True">Cancel</Button>
Ukrywanie okna
Zamiast zamykać okno, okno może być ukryte za pomocą Hide metody . Ukryte okno można ponownie otworzyć, w przeciwieństwie do okna, które zostało zamknięte. Jeśli zamierzasz ponownie użyć wystąpienia obiektu okna, ukryj okno zamiast go zamknąć. Poniższy kod demonstruje ukrywanie okna:
private void saveButton_Click(object sender, RoutedEventArgs e) =>
Hide();
Private Sub saveButton_Click(sender As Object, e As RoutedEventArgs)
Hide()
End Sub
Anuluj zamykanie i ukrywanie
Jeśli przyciski zostały zaprojektowane tak, aby ukryć okno zamiast go zamknąć, użytkownik nadal może pominąć to i zamknąć okno. Zamknij element menu systemowego i przycisk Zamknij obszaru innego niż klient okna, zamknie okno zamiast go ukryć. Rozważmy ten scenariusz, gdy twoim zamiarem jest ukrycie okna zamiast zamykania.
Uwaga
Jeśli okno jest wyświetlane modalnie z elementem ShowDialog, DialogResult właściwość zostanie ustawiona na null
wartość , gdy okno jest ukryte. Musisz przekazać stan z powrotem do kodu wywołującego, dodając własną właściwość do okna.
Po zamknięciu Closing okna jest zgłaszane zdarzenie. Procedura obsługi jest przekazywana jako CancelEventArgselement , który implementuje Cancel właściwość . Ustaw dla tej właściwości wartość , aby true
zapobiec zamykaniu okna. Poniższy kod pokazuje, jak anulować zamknięcie, a zamiast tego ukryć 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
Czasami nie chcesz ukrywać okna, ale w rzeczywistości uniemożliwić użytkownikowi jego zamknięcie. Aby uzyskać więcej informacji, zobacz Omówienie okien WPF: anulowanie zamknięcia okna.
Zobacz też
.NET Desktop feedback