单例窗口的关闭不能去杀死释放,所以一般都是重写OnClosing,在里边调用Hide()方法。
而当Hide后,虽然已经在之前清空了界面绑定等内容。但是界面并没有去重绘,使用this.InvalidateVisual()强制重新刷新也没有效果。
其实这个是需要等事件执行完后再去调用Hide(),就能够触发界面刷新。所以使用一个异步,延迟100毫秒等走完OnClosing方法再执行Hide()方法就能够刷新一次界面,在这之前设置界面绑定为空,下一次再调起单例弹窗的时候就不会有上一次的界面遗留,出现一个旧数据一闪而过的画面。
/// <summary>
/// 当窗口关闭的时候
/// </summary>
/// <param name="e"></param>
protected override void OnClosing(CancelEventArgs e)
{
Task.Run(() =>
{
Thread.Sleep(100);
Application.Current.Dispatcher.Invoke(() =>
{
Hide();
});
});
e.Cancel = true;
}