【问题标题】:UserControl always on top (topmost, XAML/WPF)UserControl 总是在最上面(最上面,XAML/WPF)
【发布时间】:2010-12-01 10:20:26
【问题描述】:

我正在使用WPF NotifyIcon from Philipp Sumi。它能够使用 WPF UserControl 作为托盘图标中的弹出窗口。它工作得非常好,但在一种情况下,我的弹出窗口顶部显示了另一个应用程序的另一个弹出窗口。我希望我的弹出窗口始终位于顶部。

可以吗?那么会影响 UserControl 的 z-order 吗?

编辑 - 对 cme​​ts 的反应: 我意识到我的问题看起来很愚蠢,因为另一个应用程序发现他的信息同样重要,并认为他应该是最重要的。就我而言,情况并非如此。我正在连接到外部应用程序。该应用程序的目的是从外部设备加载数据。该应用程序完成后,会在弹出窗口中显示“加载完成”。然后我的应用程序处理数据。当我的应用程序完成处理(几乎立即)时,它会显示一个框:“完成处理,单击此处显示数据”。 所以:在我的具体情况下,弹出窗口中的信息对用户更有用,因为它包含一个他必须单击的按钮。两个弹出窗口都“谈论”相同的数据。 我知道这可能会引发更多评论,例如:“为什么要使用弹出窗口?”。请专注于问题的答案,而不是替代解决方案。

【问题讨论】:

  • 每个开发者都坚信他们的弹出窗口是最重要的=)
  • 当其他应用程序使用相同的方法获取您的弹出窗口时会发生什么?
  • 感谢您的 cmets。我已经编辑了我的帖子并澄清了我的情况

标签: c# .net wpf xaml system-tray


【解决方案1】:

好吧,没有MakeMyThingSuperTopMost()这样的东西,你应该read here为什么。

【讨论】:

  • 我不是要 SuperTopMost。我要的是TopMost。这只是为了处理一个非常具体的案例,其中恰好有 1 个其他应用程序。
【解决方案2】:

您可以尝试使另一个弹出窗口“不是最顶层”,然后显示您的弹出窗口。您必须通过使用 EnumWindows api func 枚举所有打开的窗口来找到另一个弹出窗口,然后使用 SetWindowsPos 删除其最顶层状态。但这绝对是一个肮脏而脆弱的把戏(如果你能做到的话)。

http://pinvoke.net/default.aspx/user32.EnumWindows http://pinvoke.net/default.aspx/user32/SetWindowPos.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 1970-01-01
    • 2015-03-08
    • 1970-01-01
    • 2012-10-07
    相关资源
    最近更新 更多