C# 用户按下工具栏中的红色X时检测(右上)

C# 用户按下工具栏中的红色X时检测(右上),c#,wpf,toolbar,C#,Wpf,Toolbar,在我为测试/学习C#而编写的应用程序中,我使用hidden/visible属性打开和关闭窗口。 这是一个WPF应用程序 在主窗口中,我有一个触发此方法的“关闭”按钮: public void buttonQuit_Click(object sender, RoutedEventArgs e) { var message = exitmessage; var title = exitTitle; var result = MessageBox.Show( m

在我为测试/学习C#而编写的应用程序中,我使用hidden/visible属性打开和关闭窗口。 这是一个WPF应用程序

在主窗口中,我有一个触发此方法的“关闭”按钮:

public void buttonQuit_Click(object sender, RoutedEventArgs e)
{
    var message = exitmessage;
    var title = exitTitle;
    var result = MessageBox.Show(
        message,                    // the message to show
        title,                      // the title for the dialog box
        MessageBoxButton.YesNo,     // show two buttons: Yes and No
        MessageBoxImage.Question);  // show a question mark icon

    // lets see what has been pressed
    switch (result)
    {

        case System.Windows.MessageBoxResult.Yes:   // Yes button pressed
            CloseAllWindows();
            break;

        case System.Windows.MessageBoxResult.No:    // No button pressed
            break;

        default:                 // Neither Yes nor No pressed (just in case)
            MessageBox.Show("Oh noes! What did you press?!?!");
            break;
    }
}
通过这种方式,我确保所有窗口都关闭,包括隐藏的窗口。 但现在是关键;当用户按下(在主窗口中)工具栏右上角的红色X关闭时,只有主窗口关闭,但在后台隐藏的窗口仍然存在

所以事实上有两个问题:

  • 关闭所有窗口()真的足以让应用100%关闭吗

  • 当用户按下工具栏中的红色X时,如何“捕捉”事件,并使其同时触发正确的关闭事件


  • 您应该为您的窗口处理或事件。前者允许您取消关闭,而后者仅允许您在窗口关闭时执行必要的清理

    因此,在这种情况下,您应该将
    按钮中的代码单击
    方法放入附加到
    关闭
    事件的处理程序方法中,这样无论窗口如何关闭,它都会被触发

    然后,您的
    按钮取消单击
    方法只需调用窗口的。这将关闭窗口,进而引发
    Closing
    事件,并在附加的处理程序方法中运行代码

    至于你的另一个问题,
    CloseAllWindows
    将完全按照它所说的做:它将关闭应用程序打开的所有窗口。在大多数情况下,这应该足以关闭应用程序,但可能不足以,特别是如果您已经创建了非后台线程,或者取决于设置


    将无条件工作。

    您可以使用窗口的关闭事件进行此操作

    更多信息

    我对c#还不是很深入(现在才两周,呵呵),那么你把一个方法放到处理程序中到底是什么意思呢?他说的处理程序是指事件处理程序。。Closing或Closed是事件委托,您需要添加一个方法委托来处理事件。。我认为这是您查看MSDN@Dante上的事件文档的最佳时机:阅读事件处理。通过将处理程序方法(与常规方法类似,但具有特殊签名)附加到该事件来处理事件。无论何时引发该事件,您的处理程序方法都会被调用.ahaa,现在它开始变得更有意义了。谢谢你的链接。