完全模态 WPF 窗口?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/14835095/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-13 07:28:51  来源:igfitidea点击:

Completely Modal WPF Window?

c#wpfmodal-dialog

提问by CodeWarrior

I have a requirement that specifies that a notification tray application that uses WPF must (based on some conditions) pop-up a window that is globally modal. This should prevent the user from doing anything (even outside of the Tray application) until they have satisfied some other conditions at which time it will enable the close button and allow the user to close it.

我有一个要求,指定使用 WPF 的通知托盘应用程序必须(基于某些条件)弹出一个全局模式的窗口。这应该会阻止用户做任何事情(甚至在托盘应用程序之外),直到他们满足其他一些条件,此时它将启用关闭按钮并允许用户关闭它。

How does one make such a window? I have the window displaying and it evaluates the conditions and whatnot, but it is only modal to the application (i.e. it only blocks execution and UI for the application it is running under.

如何制作这样的窗户?我有窗口显示,它评估条件和诸如此类的东西,但它只是应用程序的模式(即它只阻止它正在运行的应用程序的执行和 UI。

I imagine I could create a borderless window and maybe disable the minimize functionality, but they would still be able to access the start menu. Any takers? What I am striving for functionality-wise is similar to the Windows UAC/Admin privilege request window.

我想我可以创建一个无边框窗口,也许可以禁用最小化功能,但他们仍然可以访问开始菜单。有接班人吗?我在功能方面所追求的类似于 Windows UAC/Admin 权限请求窗口。

This is not a duplicate of the question provided by the duplicate box at the top. That question pertains to Windows Forms and is not applicable to WPF. As it happens I received an answer that worked well for me, and it was not the answer to the question provided above. Not that it matters really, but I would like the duplicate tag taken off. I like to think that I research my questions pretty well before posting, and adding that tag implies that I do not.

这不是顶部重复框提供的问题的重复。该问题与 Windows 窗体有关,不适用于 WPF。碰巧我收到了一个对我很有效的答案,但这不是上面提供的问题的答案。并不是说它真的很重要,但我希望去掉重复的标签。我喜欢认为我在发布之前很好地研究了我的问题,并且添加该标签意味着我没有。

EDIT

编辑

This question is not a duplicate of the question that was linked int he Duplicate Question box. That question was answered with in a Windows Forms flavor, and I am using WPF, a completely different UI framework.

此问题不是在重复问题框中链接的问题的重复。这个问题以 Windows 窗体风格回答,我使用的是 WPF,一个完全不同的 UI 框架。

回答by Alex Shtof

Use the Window.ShowDialog()method. More info can be found here

使用Window.ShowDialog()方法。更多信息可以在这里找到

See the second comment by sixlettervariables.

请参阅 Sixlettervariables 的第二条评论。

回答by Thorsten Dittmar

One solution could be to make a semi transparent WPF window that covers the entire screen (actually you should say: all screens) and show the modal window using Window.ShowDialog()with the owner being that window. All you need to do then is prevent task switching (which is not an easy task), but maybe doing that is enough?

一种解决方案可能是制作一个覆盖整个屏幕的半透明 WPF 窗口(实际上您应该说:所有屏幕)并使用Window.ShowDialog()所有者作为该窗口显示模式窗口。然后你需要做的就是防止任务切换(这不是一件容易的事),但也许这样做就足够了?

Something like UAC does - for example like in the answer to this?

像UAC的东西呢-例如像在回答这个