【问题标题】:Modal dialog focus problems on WPF applicationWPF应用程序上的模态对话框焦点问题
【发布时间】:2010-06-17 13:39:37
【问题描述】:

我的 wpf 应用程序出现问题,在主应用程序后面会出现一个模式对话框,导致它挂起。

这是非常不一致的,大多数时候弹出窗口正常工作并显示在前面,但偶尔会弹出后面,这会停止与它的任何交互。如果发生这种情况,我仍然可以使用任务栏关闭对话框。我注意到它通常发生在许多其他应用程序打开并且任务栏已满时。另外,我正在使用两个屏幕,问题只出现在带有任务栏的屏幕上 - 非常奇怪!

对话框是一个窗口控件,它包含一个注入的用户控件作为它的数据上下文。要在调用 ShowDialog() 之前设置窗口的所有者,使用应用程序中的第一个活动窗口而不是 Window.GetWindow(this):


private static Window GetOwner()
{
    if (Application.Current != null)
    {
      var owner = Application.Current.Windows.Cast().FirstOrDefault(w => w.IsActive);
      return owner ?? Application.Current.MainWindow;
    }
    return null;
}

对可能导致此问题的原因有任何想法吗?甚至如何尝试和跟踪它,以便在它发生时收集更多信息?

谢谢, 多纳尔

【问题讨论】:

  • 刚刚赋值后“owner”的值是多少?是否始终如一?

标签: c# wpf user-controls modal-dialog


【解决方案1】:

我在 Windows 窗体应用程序上遇到了焦点问题,有时会转化为闪烁效果。原因是其中一个人修改了隐藏模式窗口的代码,直到它显示出来以避免丑陋的黑暗补丁!由于他在最顶部的模态窗口上调用了 .Hide() ,因此焦点转到了另一个应用程序,当他在窗口完全加载时调用 .Show() 时,它以失焦和闪烁的方式进入焦点。

我花了一段时间来解决这个问题并改变改变不透明度的逻辑。我使窗口透明,直到它完全加载。看看这是否对您有任何帮助!

【讨论】:

    【解决方案2】:

    我刚刚在我的 WPF 应用程序中遇到了类似的情况,因为模式打开窗口的 Owner 属性设置不正确。它在大多数情况下仍然可以工作,但很多时候模式窗口会卡在后面,正如您所描述的那样,尤其是在多个应用程序窗口之间切换时。

    我在模态窗口中添加了自己的 ShowDialog() 方法,如下所示:

        public bool? ShowDialog(Window owner)
        {
            Owner = owner;
            return ShowDialog();
        }
    

    并且我在显示它时明确传递了拥有的窗口。通过正确设置 Owner 属性,我的问题得到了解决。

    也许您还没有正确设置 Owner 属性?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-29
      • 2012-04-12
      相关资源
      最近更新 更多