2010-06-17 80 views
1

我的wpf应用程序出现问题,模式对话框出现在主应用程序后面,导致它挂起。WPF应用程序中的模态对话框焦点问题

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

对话框是一个窗口控件,它包含一个注入的usercontrol,因为它是数据上下文。要设置窗口的所有者调用的ShowDialog(),在应用程序中的第一个活动窗口是用来代替Window.GetWindow(本)前:


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

什么可能会导致此问题的任何想法?甚至如何尝试跟踪它,以便在发生时收集更多信息?

感谢, 多纳尔

+0

转让后的“所有者”的价值是什么?它是否一致? – Robaticus 2010-06-17 13:43:55

回答

0

我失焦问题,在Windows窗体应用程序,它有时翻译成闪烁的效果。原因是其中一个人的代码修改隐藏模式窗口,直到它显示,以避免丑陋的黑暗补丁!由于他在最上面的模式窗口中调用了.Hide(),所以焦点转移到另一个应用程序,当窗口完全加载时调用.Show()时,焦点会以焦点&或闪烁为焦点。

我花了一段时间来指出这个问题,并改变了改变不透明度的逻辑。我把窗户变成透明的,直到满载。看看这是否以任何方式帮助你!

0

我刚刚和我的WPF应用程序发生了类似的情况,因为模式打开窗口的Owner属性没有正确设置。在大多数情况下,它仍然有点不错,但很多时候模式窗口会被卡住,就像你所描述的那样,特别是在多个应用程序窗口之间切换时。

我说我自己的ShowDialog()方法,以模态窗口,它是这样的:

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

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

也许你还没有正确设置所有者属性?