在我的WPF应用程序中,我有时需要创建一个小帮助窗口,并在第一次需要时创建窗口实例。
if (mesareaderThreadQueWin == null)
{
mesareaderThreadQueWin = new MesaReaderThreadQueWindow();
}
mesareaderThreadQueWin.Show();
到目前为止这种方法很完美。但是,如果我关闭窗口并再次调用代码,程序崩溃,告诉我在窗口关闭后我无法执行 show 。
我想知道这里到底发生了什么。窗口不是 null ,否则代码只会创建一个新实例但是因为我已经显示了窗口,所以我似乎再也不能这样做了。所以窗口必须处于某种中间状态。无法显示但 null 。
我可以检测到这种状态吗?有没有办法重新使用这个窗口,然后根本不关闭窗口,而是使用 hide ?
答案 0 :(得分:4)
我可以检测到这种状态吗?
据我所知,无法访问此状态
有没有办法再次重复使用这个窗口,然后根本不关闭窗口而是使用hide? p>
是,在对话框窗口中处理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
变量。