【问题标题】:How do I prevent my Popup being covered by a new child window?如何防止我的弹出窗口被新的子窗口覆盖?
【发布时间】:2015-05-05 12:24:37
【问题描述】:

由我的父窗口定义的弹出窗口被子窗口覆盖。我希望弹出窗口显示在所有应用程序窗口的顶部。

我的父窗口具有 Topmost="True" 并包含弹出窗口(带有 Placement="AbsolutePoint"),以及启动子窗口的交互请求。在交互请求中会发生这种情况:

  1. 使用 Topmost="True" 和 Owner=parentWindow 创建子窗口
  2. Topmost 在父窗口上设置为 false
  3. 为子窗口调用 ShowDialog

弹出窗口显示在父窗口的顶部,但在子窗口的下方。我尝试将 ChildWindow.Topmost 设置为“False”,但这没有帮助。

【问题讨论】:

  • "弹出窗口显示在父窗口之上,但在子窗口之下。" - 你能提供一张正在发生的事情的截图吗?
  • 使用ShowDialog() 方法显示一个子窗口意味着这个窗口将是整个应用程序的模态窗口,所以在它上面不应该有其他窗口。你需要让你的子窗口模态化吗?
  • @Mike Eason - 我回家后必须提供屏幕截图,但想象一下这个 z 顺序:ParentWindow、Popup、ChildWindow(ChildWindow 在最前面,在所有内容之上)
  • @dymanoid - 这是一个有趣的观点。我想要我的窗口之间的模态关系,但我会尝试以非模态方式启动子窗口并报告回来。谢谢。
  • 问题是:你想做什么?弹出窗口是类似菜单的窗口,属于父窗口(就像窗口的一部分)。 Windows 又是由操作系统管理的实体(z 顺序、定位、模态父关系、alt-tab 等)。如果您使用的是类似 MDI 的界面,那么弹出窗口将正常工作(因为在这种情况下 子窗口 是父窗口本身的一部分,并且弹出窗口能够将自己投射到它们之上)。最好的办法是提供一份你想做的事情的草稿。

标签: c# wpf popup window topmost


【解决方案1】:

有点不满意,但我将重新设计我的方法,以便我使用 2 个弹出窗口,而不是 1 个弹出窗口和 1 个子窗口,它们的 z 顺序应该与它们打开的顺序相关。这也可以防止任务栏上显示另一个窗口。

我认为问题在于弹出窗口实际上只是窗口,很难让 3 个窗口很好地一起播放。我还没有发现哪些属性/属性是负责任的,但它将是 Topmost、Owner 和当前激活的窗口的某种组合让我绊倒。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多