我的wpf应用程序出了问题,主应用程序后面会出现一个模态对话框,导致它挂起。
这是非常不一致的,大多数情况下弹出窗口正常工作并显示在前面但偶尔会弹出后面,这会阻止任何与它的交互。如果发生这种情况,我仍然可以使用任务栏关闭对话框。我注意到它通常发生在许多其他应用程序打开且任务栏已满时。此外,我正在使用两个屏幕,问题只发生在任务栏的屏幕上 - 非常奇怪!
该对话框是一个窗口控件,它包含一个注入的usercontrol作为它的数据上下文。要在调用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;
}
可能导致此问题的任何想法?甚至如何尝试跟踪它,以便在发生时收集更多信息?
谢谢, 敦尔
答案 0 :(得分:0)
我在Windows窗体应用程序上没有焦点问题,有时会转换为闪烁效果。原因之一是其中一个人修改了隐藏模态窗口的代码,直到它显示出来以避免丑陋的黑暗补丁!因为他在最顶级的模态窗口上调用了.Hide(),所以焦点转移到了另一个应用程序,当窗口完全加载时调用.Show()时,焦点会出现焦距和闪烁。
我花了一段时间来解决这个问题,并改变了改变不透明度的逻辑。我让窗户透明,直到满载。看看这对你有什么帮助!
答案 1 :(得分:0)
我的WPF应用程序出现了类似的情况,因为模态打开Window的Owner属性设置不正确。在大多数情况下,它仍然有点类似,但很多时候模态窗口会被卡在后面,就像你描述的那样,特别是在多个应用程序窗口之间切换时。
我将自己的ShowDialog()方法添加到模态窗口,如下所示:
public bool? ShowDialog(Window owner)
{
Owner = owner;
return ShowDialog();
}
我在展示时明确地传递了拥有的窗口。通过正确设置所有者属性,我的问题得到了解决。
也许您还没有正确设置所有者属性?