在我的WPF应用程序中,我有时需要创建一个小的辅助窗口,并且我在第一次需要它时创建了该窗口的实例。
if (mesareaderThreadQueWin == null)
{
mesareaderThreadQueWin = new MesaReaderThreadQueWindow();
}
mesareaderThreadQueWin.Show();
到目前为止,这是完美的。但是,如果我关闭窗口并再次调用代码,程序会崩溃,告诉我在窗口已经关闭后,我无法执行show。
我有点想知道这里到底发生了什么。窗口不是null否则代码将只是创建一个新的实例,但由于我已经显示了窗口,似乎我不能再这样做了。所以窗口一定处于某种中间状态。无法变为可见,但不null。
我能检测到这个状态吗?是否有一种方法可以再次重用这个窗口,而不是完全关闭窗口,而是使用hide ?
我能检测到这个状态吗?
据我所知,没有办法访问这个状态
是否有一种方法可以再次重用这个窗口,而不是关闭窗口,而是使用隐藏?
是,处理对话框窗口中的Closing
事件,或者覆盖OnClosing
方法:
protected override void OnClosing(CancelEventArgs e)
{
e.Cancel = true;
this.Hide();
}
你可以处理Closing
事件,取消它,然后隐藏窗口:
window.Closing += delegate(object sender, CancelEventArgs e)
{
e.Cancel = true;
window.Hide();
};
这确保Window
永远不会关闭,并允许您调用Show()
任意次数。
考虑到上面的情况,这可能是多余的,但是您可以通过附加到Closed
事件并在那里设置标志来检测Window
何时关闭。也就是说,维护自己的isClosed
变量。