wpf - 模态对话框未显示在其他窗口之上

标签 wpf showdialog

我使用 Window.ShowDialog() 在 WPF (MVVM) 应用程序中打开模式窗口,但它允许我使用 Windows 任务栏 (Windows 7) 导航到其他窗口。

考虑一下: 我的应用程序中打开了 3 个非模式窗口。现在,其中一个使用 Window.ShowDialog() 打开模式窗口。我还将 Application.MainWindow 设置为模式窗口的所有者。之所以如此,是因为我使用 MVVM 消息传递,并且用于打开新窗口的消息处理程序集中在 App.xaml.cs 中。窗口确实以模态方式打开 - 没有问题。但是,Windows 7 允许我从任务栏切换到其他应用程序窗口。这会导致模式窗口位于另一个窗口后面的情况,我不希望出现这种情况。

只要模式打开,我就无法在其他窗口上执行任何操作,但如果模式窗口只要打开就始终保持在顶部,那就太好了。有没有办法在模式打开时禁用任务栏切换?仅供引用 - 从应用程序启动的所有打开的窗口在任务栏上显示为单独的条目。

提前致谢!

最佳答案

没有任何代码可以作为此基础,但听起来您已经在您创建并期望的 Window 上遗漏了一些属性 ShowDialog应用额外的“对话框”语义:

Window window = new Window()
{
    Title = "Modal Dialog",
    ShowInTaskbar = false,               // don't show the dialog on the taskbar
    Topmost = true,                      // ensure we're Always On Top
    ResizeMode = ResizeMode.NoResize,    // remove excess caption bar buttons
    Owner = Application.Current.MainWindow,
};

window.ShowDialog();

关于wpf - 模态对话框未显示在其他窗口之上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6417558/

相关文章:

c# - 标题中带有下拉菜单的自定义 WPF DataGrid

flutter - 在 flutter 中使用 showDialog 会引发错误 - "' !_debugLocked' : is not true. "

c# - 单击确定按钮时防止 ShowDialog() 返回

c# - 关闭 .NET 窗体会导致父级最小化

c# - 是否可以在不阻止所有表单的情况下使用 ShowDialog?

c# - Winforms ShowDialog(this) 屏蔽其他应用程序窗口切换到前台

c# - WPF 绑定(bind)不更新 View

wpf - 为什么是 Visual Studio x86 中 WPF 应用程序的默认平台目标,而不是 AnyCPU?

c# - WPF 中带有水平子菜单的水平菜单项

wpf - 运行目录的所有模块( Prism )