【问题标题】:Changing Wpf window appearance on Window_Closing在 Window_Closing 上更改 Wpf 窗口外观
【发布时间】:2011-07-27 14:54:17
【问题描述】:

当用户单击 x 关闭应用程序窗口时,我想弹出一条消息“正在关机,请稍候”并将其余窗口控件设置为灰色或禁用。

这是因为我的应用程序关闭和清理需要一点时间,大约 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 秒后显示。

【问题讨论】:

  • 那没有任何区别。
  • private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { _DisableBorder.Visibility = System.Windows.Visibility.Visible;线程.睡眠(2000);这段代码什么都不会发生。如果你输入 e.Cancel = true ,边框会在 2 秒后可见。
  • UI 不会在在 UI 线程上运行的方法中更新。
  • 即使我使用调度程序运行线路也没有任何反应。

标签: c# wpf window


【解决方案1】:

你应该耍花招。 在“关闭”处理程序中,您应该取消关闭,然后显示弹出窗口(作为无模式窗口),然后禁用主窗口上的所有内容。该过程结束后,您可以通过编程方式关闭弹出窗口和主窗口。

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

希望对您有所帮助。 干杯

【讨论】:

    【解决方案2】:

    从 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);
    }
    

    【讨论】:

    • 这可以在 WPF 应用程序中使用吗?我没有使用 Windows 窗体。
    • 是的,您只需要添加对 System.Windows.Forms 的引用。我已经在几个项目中做到了这一点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 2021-08-30
    • 1970-01-01
    • 2015-11-30
    • 2013-11-19
    相关资源
    最近更新 更多