WPF 对话框/消息框管理器






4.81/5 (29投票s)
在 WPF 中创建和分层显示消息、进度和等待对话框
引言
在本文中,我想介绍一个在 WPF 中的小型对话框管理框架。它提供了几个可配置的对话框。此外,还可以级联/分层显示多个对话框。该框架包括:
- 简单的消息对话框
- 等待动画对话框
- 进度对话框
- 自定义内容对话框

Using the Code
该框架的入口点通过 DialogManager
的实例进行管理。它提供了一个 API,作为创建对话框的工厂。DialogManager
本身需要一个 ContentControl
来进行交互。当显示对话框时,提供的 ContentControl
的内容将被完全移除,并替换为先前内容的渲染图像以及分层对话框。当所有对话框关闭时,原始内容将放回 ContentControl
中。
以下是一个简单的示例,说明 MessageDialog
的工作方式
var dialogManager = new DialogManager(this, Dispatcher);
dialogManager
.CreateMessageDialog("Test", "I'm a dialog", DialogMode.Ok)
.Show();
对于 WaitDialog
,可以指定一个工作者。当工作者完成时,您可以配置对话框立即关闭,或显示“完成”消息。
var dialog = _dialogManager
.CreateWaitDialog("Waiting and waiting...", "Finished", DialogMode.Ok);
// We do some asynchronous work for 2 secs...
dialog.Show(() => Thread.Sleep(2000));
此外,您可以使用 ProgressDialog
,它也接受一个工作者。然后,您可以根据需要设置工作者中的进度
var dialog = _dialogManager
.CreateProgressDialog("Progressing...", "Finished", DialogMode.Ok);
// We do some asynchronous work for 2 secs...
dialog.Show(() =>
{
for (var i = 0; i < 10; i++)
{
Thread.Sleep(200);
dialog.Progress += 10;
}
});
当然,您可以使用 CustomContentDialog
将任何 WPF 控件放置在对话框内。在这种情况下,设置对话框的 VerticalDialogAlignment
和 HorizontalDialogAlignment
属性可能很有趣,以便正确缩放您的内容。
关注点
可以通过 IDialog
接口看到,有几种配置可能性。默认情况下,单击指定的按钮(确定、取消等)会关闭对话框。此行为可以被覆盖,并且可以指定回调函数。
线程安全:对话框的创建和显示自动在 UI 线程中完成,因此无需调度器调用。
待办事项
提供一个流畅的 API 会为用户带来更多便利。可以通过添加一个可从 DialogManager
访问的配置层来实现。因此,不必使用工厂方法,而是在每次创建请求时构建一个小的配置模型,该模型将内部与对话框交互。最后,可以调用某种“create
”方法来提交配置并返回一个新的对话框。IDialogConfig
接口演示了这种方法,但我还没有时间实现它。
示例
dialogManager
.CreateMessageDialog("This is the message")
.Caption("My Title")
.Ok(() =>
{
// do something here...
})
.OkText("Commit")
.CreateDialog()
.Show();
历史
- v1 于 2013-03-17 发布