Silverlight中模态对话框的通用模拟2011-09-17 cnblogs 木野狐Silverlight 给我们带来了如同 Winform 一样便捷的开发方式,然而在桌面应用程序中一个非常重要 的元素——模态对话框,却不具备。而 ScottGu 的 Silverlight 教程中提供了一种简单的方法,可以模拟出类似模态对话框的显示。其原理跟我们在 HTML 中实现模拟的模态对话框的方法类似,无非是动态创建一个半透明的层盖住整 个页面背景,让背后的元素无法操作,然后在其上显示对话框内容即可。不过,在这篇教程中创建的子窗 体必须在调用者页面的 XAML 中手工声明,假如我们需要根据情况调出 n 个不同的对话框呢?这样做显 然不够灵活。本文的目标是基于这种场景提供一个简单的封装,以便更方便的实现主/从调用的场景。例子的运行效果如下:

点击第一个按钮后,显示如下:

下面看看如何来实现这个效果。首先,我们来定义一个模态对话框的基类,它是一个用户控件(UserControl):
using System;
using System.Windows.Controls;
namespace ModalPopupDemo
{
public class ModalDialog: UserControl
{
public event EventHandler Closed;
public void Close()
{
if (Closed != null)
{
Closed(this, EventArgs.Empty);
}
}
}
public interface IModalDialogOpener
{
void ShowModalDialog(ModalDialog dialog);
void CloseModalDialog();
}
}