Stänga ett fönster eller en dialogruta (WPF .NET)
I den här artikeln får du lära dig om de olika sätten att stänga ett fönster eller en dialogruta. En användare kan stänga ett fönster med hjälp av elementen i området som inte är klient, inklusive följande:
- Objektet Stäng i menyn System.
- Tryck på ALT + F4.
- Tryck på knappen Stäng.
- Trycker på ESC när en knapp har egenskapen IsCancel inställd på
true
i ett modalt fönster.
När du utformar ett fönster kan du tillhandahålla fler mekanismer till klientområdet för att stänga ett fönster. Några av de vanliga designelementen i ett fönster som används för att stänga det är följande:
- Ett Avsluta-objekt i menyn Arkiv, vanligtvis för huvudprogramfönster.
- Ett Stäng-objekt på menyn Arkiv, vanligtvis i ett sekundärt programfönster.
- En Avbryt-knapp, vanligtvis i en modal dialogruta.
- En Stäng-knapp , vanligtvis i en lägeslös dialogruta.
Viktig
När ett fönster har stängts kan samma objektinstans inte användas för att öppna fönstret igen.
Mer information om livslängden för ett fönster finns i Översikt över WPF-fönster: Fönsterlivslängd.
Stäng ett modalt fönster
När du stänger ett fönster som öppnades med metoden ShowDialog anger du egenskapen DialogResult till antingen true
eller false
för att ange ett "godkänt" eller "avbrutet" tillstånd. Så snart egenskapen DialogResult
har angetts till ett värde stängs fönstret. Följande kod visar hur du anger egenskapen 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
Du kan också anropa metoden Close. Om metoden Close
används anges egenskapen DialogResult till false
.
När ett fönster har stängts kan det inte öppnas igen med samma objektinstans. Om du försöker visa samma fönster igen, utlöses en InvalidOperationException. Skapa i stället en ny instans av fönstret och öppna den.
Stäng ett icke-modalt fönster
När du stänger ett fönster som öppnades med metoden Show använder du metoden Close. Följande kod visar hur man stänger ett icke-modalt fönster:
private void closeButton_Click(object sender, RoutedEventArgs e) =>
Close();
Private Sub closeButton_Click(sender As Object, e As RoutedEventArgs)
Close()
End Sub
Stäng med IsCancel
Egenskapen Button.IsCancel kan anges till true
för att möjliggöra att ESC-tangenten automatiskt stänger fönstret. Detta fungerar bara när fönstret öppnas med ShowDialog metod.
<Button Name="cancelButton" IsCancel="True">Cancel</Button>
Dölj ett fönster
I stället för att stänga ett fönster kan ett fönster döljas med metoden Hide. Ett dolt fönster kan öppnas igen, till skillnad från ett fönster som har stängts. Om du ska återanvända en instans av ett fönsterobjekt döljer du fönstret i stället för att stänga det. Följande kod visar hur du döljer ett fönster:
private void saveButton_Click(object sender, RoutedEventArgs e) =>
Hide();
Private Sub saveButton_Click(sender As Object, e As RoutedEventArgs)
Hide()
End Sub
Avbryt stäng och dölj
Om du har utformat knapparna för att dölja ett fönster i stället för att stänga det kan användaren fortfarande kringgå detta och stänga fönstret. Alternativet Stäng i systemmenyn och knappen Stäng i fönstrets icke-klientområde, stänger fönstret i stället för att dölja det. Tänk på det här scenariot när avsikten är att dölja ett fönster i stället för att stänga det.
Försiktighet
Om ett fönster visas som en modal dialog med ShowDialog, kommer egenskapen DialogResult att anges till null
när fönstret stängs. Du måste kommunicera tillståndet tillbaka till anropskoden genom att lägga till din egen egenskap i fönstret.
När ett fönster stängs aktiveras händelsen Closing. Hanteraren skickas en CancelEventArgs, som implementerar egenskapen Cancel. Ställ in egenskapen på true
för att förhindra att ett fönster stängs. Följande kod visar hur du avbryter stängningen och i stället döljer fönstret:
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
Det kan finnas tillfällen då du inte vill dölja ett fönster, men faktiskt hindrar användaren från att stänga det. Mer information finns i Översikt över WPF-fönster: Avbryt fönsterstängning.
Se även
.NET Desktop feedback