又是一个简单的问题。
我使用 WPF 中的窗口作为子窗口,我宁愿使用“X”按钮隐藏窗口而不是关闭窗口。为此,我有:
private void Window_Closing(object sender, CancelEventArgs e) {
this.Hide();
e.Cancel = true;
}
问题是,当父窗口关闭时,它永远不会关闭并保持应用程序处于活动状态。
有没有一种干净的方法来处理这个问题?我想向我的所有用户控件(窗口)添加一个 Kill 标志:
public bool KillMe;
private void Window_Loaded(object sender, RoutedEventArgs e){
KillMe = false;
}
private void Window_Closing(object sender, CancelEventArgs e) {
this.Hide();
if (!KillMe) e.Cancel = true;
}
然后在 MainWindow_Closing() 中,我必须将所有窗口 KillMe 标志设置为 true。
有什么比创建额外的标志并在关闭前忘记设置它们更好的方法吗?
您可以在“父级”关闭处理程序中调用 Shutdown...这将导致您的取消被忽略。
如果调用 Shutdown,则会引发每个窗口的 Closing 事件。但是,如果取消关闭,取消将被忽略。
对于这种情况,我通常有自己的
AppGeneral
静态类。当我真正退出应用程序时,我将 AppGeneral.IsClosing
static bool 设置为 true。然后,关闭时:
private void Window_Closing(object sender, CancelEventArgs e) {
if (!AppGeneral.IsClosing)
{
this.Hide();
e.Cancel = true;
}
}
此外,您还可以终止自己的进程(这很丑陋但有效:))
Process.GetCurrentProcess().Kill();
你应该使用
Application.Current.Shutdown();
在你的主窗口关闭方法中。
这应该覆盖任何子窗口的取消!
我遇到了类似的问题,仅在 App.xaml 中设置(无需额外的 C# 代码)ShutdownMode="OnMainWindowClose"(应用程序元素)就可以解决问题。