WPF在Closing事件中隐藏窗口阻止应用程序终止

时间:2011-01-19 17:21:02

标签: c# wpf window hide

再一个简单的问题。

我在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。

除了创建其他标志并忘记在关闭之前设置它们之外,还有更好的方法吗?

3 个答案:

答案 0 :(得分:8)

您可以在“父级”关闭处理程序中调用Shutdown ...这将导致您的取消被忽略。

来自Window.Closing

  

如果调用Shutdown,则会引发每个窗口的Closing事件。但是,如果取消关闭,则忽略取消。

答案 1 :(得分:2)

我通常会为这种情况拥有自己的AppGeneral静态类。当我真的退出应用程序时,我将AppGeneral.IsClosing静态bool设置为true。然后,关闭时:

private void Window_Closing(object sender, CancelEventArgs e) {
if (!AppGeneral.IsClosing)   
   { 
     this.Hide();
     e.Cancel = true;
   }
}

另外,你可以杀死你自己的进程(这很难看但正在工作:))Process.GetCurrentProcess().Kill();

答案 2 :(得分:1)

你应该使用

Application.Current.Shutdown();

在主窗口关闭方法中。

这应该取消任何子窗口的取消!