【问题标题】:UI not getting updated after call to OpenFileDialog.ShowDialog()调用 OpenFileDialog.ShowDialog() 后 UI 未更新
【发布时间】:2014-01-25 20:42:42
【问题描述】:

我有一个 WPF 应用程序,它由一个 MainWindow 组成,其中也有一个常规按钮。 绑定到按钮单击事件我正在通过 OpenFileDialog 加载序列化对象:

private void LoadNetwork_Click(object sender, RoutedEventArgs e)
{
    var openDialog = new OpenFileDialog { Multiselect = false };
    var result = openDialog.ShowDialog();
    if (result)
    {
        string file = openDialog.FileName;
        try
        {
             _network= new SimplifiedNetwork(file, 1);
             MessageBox.Show("Loaded OK");
        }
        catch (Exception)
        {
             MessageBox.Show("Load error");
        }
    }
}

执行此方法后,UI 不再更新。当我什么都不说时,我的意思是即使窗口中按钮的悬停效果也不起作用(更不用说通过后面的代码更新标签、属性更改事件、开始调用等),就像它被冻结了(但仍然响应点击)。

我认为这是我在例程中所做的事情,但只是将方法调用减少到

private void LoadNetwork_Click(object sender, RoutedEventArgs e)
{
    var openDialog = new OpenFileDialog { Multiselect = false };
    var result = openDialog.ShowDialog();  
}

有相同的结果。

澄清。 - 这发生在模态对话框关闭后。 - 一旦用户界面因任何原因失去焦点(如最小化 - 恢复,切换到另一个窗口),它似乎也会表现出来。 - 这似乎只发生在我的 Windows 8.1 机器上(放在我身边的 xp 虚拟机中,没问题)。

有什么想法吗?

【问题讨论】:

  • 是的,对象被加载等等。冻结是一个糟糕的选择,“静态”实际上会更好。你知道,当你将鼠标悬停在一个按钮上时,它会改变它的颜色等。在我调用该方法之后,该按钮不会对我的鼠标光标悬停做出反应。但是我仍然可以点击它,它仍然会执行与点击事件绑定的动作。
  • 您是说当文件对话框打开时您不能与您的应用程序交互?是这样,那么这是设计使然。
  • 之后没有,交互是部分的(它响应命令,但没有视觉更新)

标签: c# wpf


【解决方案1】:

OpenFileDialog 是一个模态对话框,它的目的是让后台的窗口在对话框打开时没有响应。

Here 提供更多信息,也是您的问题的可能解决方案。

【讨论】:

  • 当然。但这仍然会发生之后我关闭对话框。实际上,经过进一步检查,我的窗口在失去焦点后停止更新(例如最小化->恢复)
  • 它没有说明您关于关闭对话框的问题
猜你喜欢
  • 2022-11-13
  • 1970-01-01
  • 2020-07-26
  • 1970-01-01
  • 2020-08-07
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 1970-01-01
相关资源
最近更新 更多