我目前正在开发一个有多个窗口的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");
} 
Run Code Online (Sandbox Code Playgroud)
打开对话框将完全冻结第一个窗口.如果您单击它或尝试任何类型的交互,操作系统会"叮当作响!" 声音并闪烁消息框上的边框.但是你打开的所有其他窗口都可以被点击,移动,调整大小等等,这就是我想要阻止的.
事实证明,有是一个办法做到这一点,但它不是漂亮.它涉及使用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*/);
Run Code Online (Sandbox Code Playgroud)
资料来源:http://social.msdn.microsoft.com/Forums/vstudio/en-US/8d1bd4a2-455e-4e3f-8c88-7ed49aeabc09/messagebox-is-not-applicationmodal?forum=wpf
希望这对未来的其他人有所帮助!