WPF 在关闭事件中隐藏窗口可防止应用程序终止

问题描述 投票:0回答:4

又是一个简单的问题。

我使用 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。

有什么比创建额外的标志并在关闭前忘记设置它们更好的方法吗?

c# wpf window hide
4个回答
9
投票

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

来自Window.Closing

如果调用 Shutdown,则会引发每个窗口的 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();


2
投票

你应该使用

Application.Current.Shutdown();

在你的主窗口关闭方法中。

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


0
投票

我遇到了类似的问题,仅在 App.xaml 中设置(无需额外的 C# 代码)ShutdownMode="OnMainWindowClose"(应用程序元素)就可以解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.