3

我目前正在开发一个具有多个窗口的 WPF 应用程序。从“主”窗口,您应该能够关闭整个应用程序。在应用程序关闭之前,客户端希望它显示一个对话框,基本上询问“你确定要关闭应用程序吗”并阻止所有其他窗口,直到用户回答。

我目前正在使用 MessageBox.Show() 来创建此对话框,但由于某种原因它只阻塞了主窗口。

这是我所说的最简单的例子;如果您创建一个带有两个按钮的 WPF 窗口:

private void openChildWindowButton_Click(object sender, RoutedEventArgs e)
{
  var window = new ChildWindow();
  window.Show();
}

private void openDialogButton_Click(object sender, RoutedEventArgs e)
{
  MessageBox.Show(this, "This should freeze all other windows");
} 

打开一个对话框将完全冻结第一个窗口。如果您单击它或尝试任何类型的交互,操作系统会发出“叮!” 声音并闪烁消息框上的边框。但是您打开的所有其他窗口都可以单击、移动、调整大小等,这就是我想要阻止的。

4

2 回答 2

7

事实证明,有一种方法可以做到这一点,但它并不漂亮。它涉及使用 WinForms 版本MessageBox并将未记录的选项作为最后一个属性传递。

var result = System.Windows.Forms.MessageBox.Show("Are you sure you want to exit this app?", "Exit", System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Question, System.Windows.Forms.MessageBoxDefaultButton.Button2, (System.Windows.Forms.MessageBoxOptions)8192 /*MB_TASKMODAL*/);

资料来源:http ://social.msdn.microsoft.com/Forums/vstudio/en-US/8d1bd4a2-455e-4e3f-8c88-7ed49aeabc09/messagebox-is-not-applicationmodal?forum=wpf

希望这对将来的其他人有所帮助!

于 2013-12-24T17:59:42.287 回答
0

如果这在 Windows 窗体中的 WPF 中有效,您可以使用:

MessageBox.ShowDialog()

克里斯

以上不工作...

编辑:

但是有一个解决方法:设置一个像 MessageBox 一样的 Form(使用固定的 Border-Type),然后使用 ShowDialog() 显示它。然后将属性中的 Forms Cacel 和 Ok Button 设置为您的 Button,您可以像在 MessageBox 中一样获得 DialogResult。希望有帮助,但它也来自 Windows-Forms ;)

于 2013-10-21T20:47:37.197 回答