【问题标题】:Completely Modal WPF Window?完全模态 WPF 窗口?
【发布时间】:2013-01-27 21:49:52
【问题描述】:

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

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

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

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

编辑

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

【问题讨论】:

  • 这听起来相当令人讨厌,我不确定您是否可以在没有讨厌的黑客攻击的情况下接管桌面以使您的屏幕保持在前台。
  • 我不写要求。我只能反对它们,并在我被击落时执行它们。
  • 在某种程度上确实如此。要求是没有办法(至少没有像 Alt+Tab 这样简单的方法)摆脱它......我曾希望有一些我不知道的相当简单的方法来创建系统模式窗口。跨度>
  • 嗯,这是一个让我们的用户将时间投入时间系统的应用程序。他们安装并使用了许多其他应用程序。就个人而言,我会修复时间系统,使其更容易和更有吸引力,而不是唠叨他们至死。
  • @CodeWarrior 链接时间登录到工资系统。无需唠叨。

标签: c# wpf modal-dialog


【解决方案1】:

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

参见六字母变量的第二条评论。

【讨论】:

  • 这只会使窗口成为应用程序的模式,而不是系统的其余部分。
  • Window.ShowDialog() 加上LockSetForegroundWindow 调用可能会“帮助”但不会处理所有情况。
  • 在与产品负责人会面后,我们决定暂时让绕过窗口变得困难就足够了。我将采用上述方法,因为它至少对非高级用户来说会很困难。
  • "参见六字母变量的第二条评论。"这不是很有用。我在任何地方都找不到这样的评论。如果该评论有重要的要说,请将其包含在答案中。
【解决方案2】:

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

像 UAC 一样 - 例如在this的答案中?

【讨论】:

  • 是的,我正在考虑这个问题。拦截 Ctl+Shift+Esc 和 Alt+Tab 有多难?这些组合键是否被高度保留以至于在应用程序中处理它们什么都不做?我将不得不考虑...
  • 我没有完整阅读这篇文章,但实际上似乎并不容易:stackoverflow.com/questions/886076/…
  • 不,不容易。当我得到这个要求时,这实际上是我的问题之一,但经理们不想听到“这会有点困难/混乱”。
  • 我知道 :-) 幸运的是我不必实现它。希望我能帮上点忙。
猜你喜欢
  • 2011-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多