WPF窗口关闭后会发生什么?

时间:2011-05-02 08:33:15

标签: wpf user-interface window

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

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

mesareaderThreadQueWin.Show(); 

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

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

我可以检测到这种状态吗?有没有办法重新使用这个窗口,然后根本不关闭窗口,而是使用 hide

2 个答案:

答案 0 :(得分:4)

  

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

据我所知,无法访问此状态

  

有没有办法再次重复使用这个窗口,然后根本不关闭窗口而是使用hide?

是,在对话框窗口中处理Closing事件,或覆盖OnClosing方法:

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

答案 1 :(得分:1)

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

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

这可确保Window永不关闭,并允许您多次拨打Show()

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