添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
  • 在模式窗口上,当按钮的 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 关闭

    若要启用 ESC 键以自动关闭窗口,可以将 Button.IsCancel 属性设置为 true。 这仅在使用 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 事件。 将处理程序传递给实现 Cancel 属性的 CancelEventArgs。 若要防止窗口关闭,请将该属性设置为 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 窗口概述:取消关闭窗口

  • WPF 窗口概述
  • 对话框概述
  • 如何打开窗口或对话框
  • System.Windows.Window.Close()
  • System.Windows.Window.Closing
  • System.Windows.Window.DialogResult
  • System.Windows.Window.Hide()
  • System.Windows.Window.Show()
  • System.Windows.Window.ShowDialog()
  •