65.9K
CodeProject 正在变化。 阅读更多。
Home

WPF 对话框/消息框管理器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.81/5 (29投票s)

2013年3月18日

CPOL

2分钟阅读

viewsIcon

100411

downloadIcon

7039

在 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 控件放置在对话框内。在这种情况下,设置对话框的 VerticalDialogAlignmentHorizontalDialogAlignment 属性可能很有趣,以便正确缩放您的内容。

关注点

可以通过 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 发布
© . All rights reserved.