【问题标题】:What happens to a WPF window after it is closed?WPF 窗口关闭后会发生什么?
【发布时间】:2011-08-16 20:06:28
【问题描述】:

在我的 WPF 应用程序中,有时我需要创建一个小的帮助窗口,并且我会在第一次需要它时创建该窗口的实例。

if (mesareaderThreadQueWin == null)
{
    mesareaderThreadQueWin = new MesaReaderThreadQueWindow();    
}

mesareaderThreadQueWin.Show(); 

到目前为止,这很完美。但是,如果我关闭窗口并再次调用代码,程序会崩溃,告诉我在窗口已经关闭后我不能执行 show

我有点想知道这里到底发生了什么。窗口不是 null 否则代码只会创建一个新实例,但由于我已经显示了窗口,所以我似乎不能再这样做了。所以窗口必须处于某种中间状态。无法变为可见但不是 null

我可以检测到这种状态吗?有没有办法再次重用这个窗口,而不是完全不关闭窗口并使用 hide 代替?

【问题讨论】:

  • 您可以改用 Hide() 成员,它会保存实例供您下次使用。

标签: wpf user-interface window


【解决方案1】:

你可以处理Closing事件,取消它,然后隐藏窗口:

window.Closing += delegate(object sender, CancelEventArgs e)
{
    e.Cancel = true;
    window.Hide();
};

这可确保Window 永远不会关闭,并允许您多次调用Show()

考虑到上述情况,这可能是多余的,但是您可以通过附加到 Closed 事件并在那里设置标志来检测您的 Window 何时关闭。也就是说,维护自己的isClosed 变量。

【讨论】:

    【解决方案2】:

    我可以检测到这种状态吗?

    据我所知,没有办法进入这个状态

    除了完全不关闭窗口而是使用隐藏之外,有没有办法再次重用这个窗口?

    可以,在对话窗口处理Closing事件,或者重写OnClosing方法:

    protected override void OnClosing(CancelEventArgs e)
    {
        e.Cancel = true;
        this.Hide();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-26
      • 1970-01-01
      • 2011-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-25
      相关资源
      最近更新 更多