【问题标题】:Bring modal dialog to front without using TopMost property不使用 TopMost 属性将模态对话框置于最前面
【发布时间】:2015-01-25 01:10:27
【问题描述】:

我正在使用 ShowDialog(在 System.Windows.Window 上)向用户显示确认样式的对话框窗口。我从系统托盘菜单选项执行此操作。我的问题是它的发射本身隐藏在 Windows 下。如果我使用 TopMost 就可以引起用户的注意,但使用 TopMost 在其他方面过于侵入。我不想强制对话框始终位于其他窗口之上。

在调用 ShowDialog 之前,我尝试了各种选项,例如 Focus、Activate、BringIntoView,以尝试将对话框引起用户的注意,但无济于事。除了使用 TopMost,我还有其他选择吗?我确实想保留对话框的模态行为。

【问题讨论】:

  • 您可以使用 setwindowpos 并指定 Z 顺序...您想要完成的究竟是什么?
  • 启动时我希望对话框出现在所有其他窗口之上。如果他们在对话窗口上带来另一个窗口(例如他们的前景),那么它应该在那个窗口后面
  • 好的,设置 TopMost 有什么问题?只需将其设置为 true,然后设置为 false。
  • 正如我所说的那样,它太具有侵入性了,因为您无法在其上移动任何其他窗口。我在我现在要提供的答案中找到了答案。还是谢谢
  • 请将您的解决方案发布为您自己问题的答案。这样未来的读者就可以从这篇文章中受益。

标签: c# wpf winforms dialog modal-dialog


【解决方案1】:

我遇到的问题的症结是在调用 window.ShowDialog 之前设置 window.Activate 没有效果(焦点也没有等)。相反,在调用 ShowDialog 之前,我将一个事件处理程序连接到 ContentRendered 事件并在其中激活,然后它具有将窗口直接带到前面但仍允许用户在其上拖动其他窗口的预期效果。

window.ContentRendered += (sender, eventArgs) => window.Activate();
window.ShowDialog();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 2020-12-26
    • 1970-01-01
    相关资源
    最近更新 更多