2011-05-30 55 views
0

在我的应用程序的某些用户中,某些WPF Windows将显示在Shellwindow后面。这只发生在一些地方。 Shellwindow没有设置Topmost。我希望有人能给我一个小费,我可以做些什么来防止这种情况发生。背景中显示的窗口

谢谢。

最好的问候,托马斯

+2

对不起,困惑:什么是shellwindow?有启动按钮的资源管理器任务栏? – Rup 2011-05-30 19:42:55

回答

3

只有三种情况,我知道在您的一个窗口可能会失去焦点和消失的另一个应用程序的窗口后面:)

  • 程序调用SetForegroundWindow(以推的一个它的窗户进入前景。从Win98开始,Windows对此有特定的对策,Win98是一个经常犯下的用户界面犯罪。它只有在一段时间内没有在活动窗口中检测到任何输入事件时才允许。否则将闪烁任务栏按钮。当然,程序员找到了反制措施。大约两年前,Windows Update的一个版本开始这样做。幸运的是,负责这件事的程序员被带到了外面并被枪杀。

  • 自我造成的种类,触发短暂的时间有没有你的窗口能够接收焦点。 Windows窗口管理器被迫找到另一个窗口来关注焦点。这可能是一个'外壳窗口',无论什么方便。当你显示一个对话框并隐藏你的主窗口或者自己关闭它时,你会得到最典型的结果。当对话框关闭时再次显示。这太迟了,只有一秒钟的时间,没有窗口可以获得焦点。它不会重复顺便说一句,一点也不重要,因为它取决于其他窗口可用。

  • 在线程上显示顶层非拥有窗口。这样的窗口不能与您的应用中的其他窗口具有任何Z顺序关系,并且只有桌面窗口作为父窗口。它与其他任何窗口竞争,包括Explorer拥有的窗口。让它在其他窗口上显示是一个垃圾拍摄,通常有效,但有时不会。当用户是消息框时特别痛苦。

2

可以辅助窗口的设置Window.Owner到主窗口,以避免出现主窗口后面的子窗口。我假设这是你在shell窗口中的意思。

这里是这样(从文件)的一些后果:

  • 如果被最小化的所有者窗口,其拥有的所有窗口最小化也是如此。
  • 如果一个拥有的窗口被最小化,它的所有者不会被最小化。
  • 如果所有者窗口最大化,则所有者窗口及其拥有的窗口都将被恢复。
  • 所有者窗口无法覆盖拥有的窗口。
  • 未使用ShowDialog打开的拥有的窗口不是模态。用户仍然可以与所有者窗口进行交互。
  • 如果关闭所有者窗口,则其拥有的窗口也将关闭。
  • 如果一个拥有的窗口使用Show在其所有者窗口中打开,并且所有者窗口关闭,则不会引发拥有的窗口的Closing事件。