我正在编写一个应用程序(c+wpf),其中所有模式样式的对话框都作为UserControl在覆盖mainWindow的半透明网格上实现。这意味着只有一个Window并且它保持了所有公司应用程序的外观。
要显示MessageBox,语法如下:

CustomMessageBox b = new CustomMessageBox("hello world");
c.DialogClosed += ()=>
{
   // the rest of the function
}
// this raises an event listened for by the main window view model,
// displaying the message box and greying out the rest of the program.
base.ShowMessageBox(b);

正如您所看到的,不仅执行流实际上是反向的,而且与经典的.NET版本相比,它的冗长得可怕:
MessageBox.Show("hello world");
// the rest of the function

我真正想要的是一种在对话框关闭事件引发之前不从base.ShowMessageBox返回的方法,但是我看不出在不挂起gui线程从而阻止用户单击ok的情况下等待它是怎么可能的。我知道我可以将委托函数作为ShowMessageBox函数的参数,这样可以防止执行反转,但仍然会导致一些疯狂的语法/缩进。
我是不是遗漏了一些显而易见的东西,还是有一个标准的方法来做到这一点?

最佳答案

您可能想看看codeproject上的this文章和msdn上的this文章。第一篇文章将指导您手动创建一个阻塞模式对话框,第二篇文章将说明如何创建自定义对话框。

07-24 09:21