再一个简单的问题。
我在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。
除了创建其他标志并忘记在关闭之前设置它们之外,还有更好的方法吗?
答案 0 :(得分:8)
您可以在“父级”关闭处理程序中调用Shutdown ...这将导致您的取消被忽略。
如果调用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();
在主窗口关闭方法中。
这应该取消任何子窗口的取消!