在本文中,你将了解关闭窗口或对话框的不同方法。 用户可以使用非客户端区域中的元素关闭窗口,包括以下:
- “系统”菜单的“关闭”项。
- 按 Alt + F4。
- 按 “关闭 ”按钮。
- 当一个按钮在模态窗口中设置IsCancel属性为
true
时,按下ESC。
设计窗口时,向客户区域提供更多关闭窗口的机制。 用于关闭窗口的一些常见设计元素包括:
- “文件”菜单中的“退出”项,通常用于主应用程序窗口。
- “文件”菜单中的“关闭”项,通常位于辅助应用程序窗口中。
- “ 取消” 按钮,通常位于模式对话框中。
- 关闭按钮,通常位于无模式对话框中。
重要
关闭窗口后,不能使用同一对象实例重新打开窗口。
有关窗口生命周期的详细信息,请参阅 WPF 窗口概述:窗口生存期。
关闭模式窗口
关闭使用 ShowDialog 该方法打开的窗口时,请将 DialogResult 该属性分别设置为“ true
已接受”或 false
“已取消”状态。 属性设置为值后 DialogResult
,窗口就会关闭。 以下代码演示如何设置 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
还可以调用该方法 Close 。
Close
如果使用该方法,则属性DialogResult设置为 false
.
关闭窗口后,无法使用相同的对象实例重新打开它。 如果尝试显示同一个窗口,则会引发InvalidOperationException。 而是创建窗口的新实例并打开它。
关闭非模式窗口
关闭使用 Show 该方法打开的窗口时,请使用该方法 Close 。 以下代码演示如何关闭一个无模式窗口:
private void closeButton_Click(object sender, RoutedEventArgs e) =>
Close();
Private Sub closeButton_Click(sender As Object, e As RoutedEventArgs)
Close()
End Sub
通过 IsCancel 关闭
可以将该 Button.IsCancel 属性设置为 true
启用 ESC 键以自动关闭窗口。 这仅在使用 ShowDialog 方法打开窗口时有效。
<Button Name="cancelButton" IsCancel="True">Cancel</Button>
隐藏窗口
可以使用该方法隐藏 Hide 窗口,而不是关闭窗口。 与已关闭的窗口不同,可以重新打开隐藏窗口。 如果要重用窗口对象实例,请隐藏该窗口,而不是将其关闭。 以下代码演示如何隐藏窗口:
private void saveButton_Click(object sender, RoutedEventArgs e) =>
Hide();
Private Sub saveButton_Click(sender As Object, e As RoutedEventArgs)
Hide()
End Sub
取消关闭并隐藏
如果已将按钮设计为隐藏窗口而不是关闭窗口,用户仍可以绕过此窗口并关闭窗口。 系统菜单的 “关闭 ”项和窗口非工作区的 “关闭 ”按钮将关闭窗口,而不是隐藏窗口。 当你的意图是隐藏窗口而不是关闭窗口时,请考虑此方案。
谨慎
如果窗口以模式 ShowDialog显示,则当窗口处于隐藏状态时, DialogResult 该属性将设置为 null
。 需要通过在窗口中添加您自己的属性,向调用代码传达状态。
关闭窗口时,将触发 Closing 事件。 处理程序会接收一个CancelEventArgs,该CancelEventArgs实现了Cancel属性。 将此属性设置为 true
阻止窗口关闭。 以下代码演示如何取消关闭并隐藏窗口:
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
有时你可能不想隐藏窗口,但实际上会阻止用户关闭窗口。 有关详细信息,请参阅 WPF 窗口概述:取消窗口关闭。