2011-07-27 71 views
2

当用户单击x关闭应用程序窗口时,我想弹出一条消息,提示“正在关闭,请稍候”并灰显或禁用窗口控件的其余部分。在Window_Closing上更改Wpf窗口外观

这是因为我的应用程序关闭和清理需要一段时间,大约20秒。

但是,Window_Closing事件处理程序中的wpf命令从来没有做任何事情。我有一个透明的灰色填充边框,覆盖了窗口控件,我想将可见性从折叠状态更改为可见状态。代码被调用,但没有任何变化。

就好像请求排队,但没有被调用,因为窗口正在关闭。

有什么方法可以清除这个请求吗?

编辑:

试试这个代码:

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) 
{ 
    _DisableBorder.Visibility = System.Windows.Visibility.Visible; 
    Thread.Sleep(2000); 
} 

该应用程序将关闭2秒后,但边界一定不会显示。如果添加e.Cancel = true,则边界将在2秒后显示。

+0

尝试调用'UpdateLayout请()' – SLaks

+0

这并没有什么差别。 – Sugrue

+0

private void Window_Closing(object sender,System.ComponentModel.CancelEventArgs e) {_DisableBorder.Visibility = System.Windows.Visibility.Visible; Thread.Sleep(2000); }这段代码完全不会发生任何事情。如果您放入e.Cancel = true,边框将在2秒后变为可见。 – Sugrue

回答

2

你应该弄个窍门。 在“Closing”处理程序中,您应该取消关闭,然后显示弹出窗口(如无模式窗口),然后禁用主窗口上的所有内容。当过程结束时,您可以编程方式关闭弹出窗口和主窗口。

我不会在关闭处理程序中执行任何耗时的操作。

希望它有帮助。 干杯

+0

不错。这样可行。谢谢。 – Sugrue

1

调用从System.Windows.Forms.Application的DoEvents似乎这样的伎俩..

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) 
{ 
    _DisableBorder.Visibility = System.Windows.Visibility.Visible; 
    System.Windows.Forms.Application.DoEvents(); 
    Thread.Sleep(2000); 
} 
+0

这将在WPF应用程序中工作吗?我没有使用Windows窗体。 – Sugrue

+0

是的,你只需要添加一个对System.Windows.Forms的引用。我已经在一些项目中完成了这项工作 – drizkol