【发布时间】:2015-05-05 12:24:37
【问题描述】:
由我的父窗口定义的弹出窗口被子窗口覆盖。我希望弹出窗口显示在所有应用程序窗口的顶部。
我的父窗口具有 Topmost="True" 并包含弹出窗口(带有 Placement="AbsolutePoint"),以及启动子窗口的交互请求。在交互请求中会发生这种情况:
- 使用 Topmost="True" 和 Owner=parentWindow 创建子窗口
- Topmost 在父窗口上设置为 false
- 为子窗口调用 ShowDialog
弹出窗口显示在父窗口的顶部,但在子窗口的下方。我尝试将 ChildWindow.Topmost 设置为“False”,但这没有帮助。
【问题讨论】:
-
"弹出窗口显示在父窗口之上,但在子窗口之下。" - 你能提供一张正在发生的事情的截图吗?
-
使用
ShowDialog()方法显示一个子窗口意味着这个窗口将是整个应用程序的模态窗口,所以在它上面不应该有其他窗口。你需要让你的子窗口模态化吗? -
@Mike Eason - 我回家后必须提供屏幕截图,但想象一下这个 z 顺序:ParentWindow、Popup、ChildWindow(ChildWindow 在最前面,在所有内容之上)
-
@dymanoid - 这是一个有趣的观点。我想要我的窗口之间的模态关系,但我会尝试以非模态方式启动子窗口并报告回来。谢谢。
-
问题是:你想做什么?弹出窗口是类似菜单的窗口,属于父窗口(就像窗口的一部分)。 Windows 又是由操作系统管理的实体(z 顺序、定位、模态父关系、alt-tab 等)。如果您使用的是类似 MDI 的界面,那么弹出窗口将正常工作(因为在这种情况下 子窗口 是父窗口本身的一部分,并且弹出窗口能够将自己投射到它们之上)。最好的办法是提供一份你想做的事情的草稿。
标签: c# wpf popup window topmost