2011-01-19 54 views
3

又一个简单的问题。我使用WPF中的窗口作为子窗口,我宁愿让'X'按钮隐藏窗口而不是关闭窗口。对于这一点,我有:WPF隐藏窗口关闭事件防止应用程序终止

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

的问题是,当关闭父窗口,这永远不会关闭,并保持应用程序活着。

有没有一种干净的方式来处理这个问题?我想添加一个杀标志,我所有的用户控件(窗口)的:

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。

比创建其他标志并在关闭之前忘记设置它们更好吗?

回答

7

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

Window.Closing

如果关机之称,是提高了每个窗口的关闭事件。但是,如果关闭取消,取消将被忽略。

2

对于这种情况,我平时有自己的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();

1

您应该使用

Application.Current.Shutdown();

你的主内窗户关闭方法。

这应该覆盖取消任何子窗口!

+0

直指点。我可以证实这个作品。 – bonitzenator 2016-09-01 10:06:40