【问题标题】:How to know if Window Close was completed or cancelled?如何知道窗口关闭是完成还是取消?
【发布时间】:2015-08-25 08:34:28
【问题描述】:

WPF 应用程序。 Window1可以打开WindowA.Show(), WindowB.Show(), WindowC.Show()

当我们关闭 Window1 时,我们也想关闭所有打开的窗口(A、B 和 C)。

在我们调用Window1_Closing 事件时

WindowA.Close();
WindowB.Close();
WindowC.Close();

在关闭窗口时可以调用任何这些 Cancel = true 并且 WindowA(或 B 或 C)不会关闭。 然后我们不想关闭 Window1(父级)。 如何在Window1_Closing 中知道是否有任何子窗口被取消(未关闭)?

【问题讨论】:

  • 那是Window 表格吗?
  • 你不能给你的子窗口WindowA等添加一个属性吗?然后在关闭时,您可以将其设置为 true 或 false,具体取决于关闭是否被取消。在您的应用程序窗口中,您可以检查该属性并在必要时取消。
  • 这是我在这里问问题时想要避免的。最后,如果 WPF 不支持解决方案,我会这样做。
  • 您的应用程序中还有其他窗口吗?如果没有,则在 Window1 关闭时,您还可以 Exit() 应用程序,这将关闭其所有子窗口(A、B、C)

标签: c# wpf


【解决方案1】:
  1. Window.Closed 事件在窗口关闭后触发。将您的逻辑移至 Closed 事件的事件处理程序,或使用该事件发送一些标志:

    bool isClosed = false;
    WindowA.Closed += delegate { isClosed = true; };
    WindowA.Close();
    
    if (isClosed) { 
    }
    
  2. Application.Current.Windows 是当前打开的窗口的集合:

    WindowA.Close();
    bool isClosed = !Application.Current.Windows.OfType<Window>().Contains(WindowA);
    

【讨论】:

  • @Serge,我实施了您建议的解决方案,它也运行良好。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-13
  • 1970-01-01
  • 1970-01-01
  • 2011-07-11
  • 1970-01-01
  • 1970-01-01
  • 2021-02-08
相关资源
最近更新 更多