UserControl 始终位于顶部(最顶部,XAML/WPF)

发布于 2024-10-05 18:32:12 字数 603 浏览 3 评论 0 原文

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

可以吗?那么可以影响 UserControl 的 z 顺序吗?

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

I'm using the WPF NotifyIcon from Philipp Sumi. It has the ability to use a WPF UserControl as popup in your tray icon. It works very nice, but in one situation I have another popup from another application that is shown on top of my popup. I want my popup to be always on top.

Can that be done? So can influence the z-order of a UserControl?

Edit - reaction to comments:
I realize my question looks stupid, because the other app finds his information just as important, and thinks he should be on top. In my case, that's not the situation. I'm connecting to an external app. The purpose of that app is to load data from an external device. When that app finished, it says "loading finished" in a popup. Then my app process the data. When my app completes the processing (almost immediately), it shows a box: "Completed processing, click here to show the data".
So: in my specific case the information from my popup is more useful to the user, because it contains a button he has to click. Both popups "talk" about the same data.
I understand this may raise more comment's like: "Why use a popup?". Please focus on an answer to the question, not alternative solutions.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

伤感在游骋 2024-10-12 18:32:12

好吧,没有这样的 MakeMyThingSuperTopMost() 东西,你应该 请阅读此处原因。

well, there is no such MakeMyThingSuperTopMost() thinggy, you should read here why.

衣神在巴黎 2024-10-12 18:32:12

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

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

You can try to make the other popup "not topmost" and then show your popup. You will have to find the other popup either via enumerating all open windows with the EnumWindows api func and then remove its topmost status with SetWindowsPos. But this is definitely a dirty and fragile trick (if you can make it work at all).

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文