【问题标题】:WPF hide a window in Closing event prevents from application terminatingWPF 在关闭事件中隐藏窗口可防止应用程序终止
【发布时间】:2011-06-11 22:15:44
【问题描述】:

又是一个简单的问题。

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


    【解决方案1】:

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

    来自Window.Closing

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

      【讨论】:

        【解决方案3】:

        你应该使用

        Application.Current.Shutdown();

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多