拼吾爱程序人生

首页 » .Net编程 » Silverlight » 在silverlight中定制自己的MessageBox(消息框)
cobra - 2008-8-28 12:16:00
在silverlight中,如果想使用“消息框”可使用下面的方法,即:HtmlPage.Window.Alert("消息框内容")。如果想要显示更加复杂的内容或定义消息框样式的话,基本上没有什么好的方法。最近在网上看到了一篇文章,该文章的作者也谈到了上面所说的话题,相关链接如下:  
    The Curious Incident of the MessageBox in the Silverlight App

    在线演示如下:http://silverlight.services.live ... sagebox/iframe.html


首先是普通样式:

 附件: 您所在的用户组无法下载或查看附件



接着是显示图形样式:

 附件: 您所在的用户组无法下载或查看附件
使用新的样式风格:

 附件: 您所在的用户组无法下载或查看附件

首先请下载本文中的源码(本人已部分修改了原文中的源码和相应的样式,以便进行DEMO演示)。下面是相应的类图和说明:


 附件: 您所在的用户组无法下载或查看附件



    接下来,将会以这个类图来逐个解释相应类结构信息,首先看一下MessageBoxControls(相应内容见注释):

Code

Code


而MessageBox这个控件使用封装类结构如下(相关内容见注释):

Code

Code


其实通过上面的类,我们可以看出作者是如何在当前页面中显示消息框信息的,也就是上面代码段里
的如下代码:

Code


也就是通过realVisual来保存原有的页面元素信息,然后重新按指定顺序(先realVisual再messagecontrol)
加载UIElement来实现显示消息框的方式,当然这种有HACK味道的做法到底效果好不好,连原作者都表示怀疑,他
本人也感觉还应有更好的Solution。

    当然realVisual变量的一个重要用处在于当消息框被关闭时,用它来还原页面中的元素,而这块代码就是上面
所说的OnDismissed方法所做的事了,代码如下:

Code


这样,我们可以在应用程序中使用该类来显示相应的消息框了,其声明和使用代码如下:

Code


说到这里,还有一个内容没有介绍,也就是作者所定义的两个样式文件,其中之一被放置到了generic.xaml
中,以便做了控制默认加载样式,其绑定直接在MessageBoxControl构造函数中完成,如下:

Code


而另外的样式被放在了page.xaml中,以便于程序运行时访问,这里就不多作介绍了。不过本人已修改了这两
个样式中的一些数值,主要是为了显示时比例更好看一些。


    好了,今天的内容就先到这里了。源码下载:
 附件: 您所在的用户组无法下载或查看附件



    作者: 代震军, daizhj
    原帖链接:http://www.cnblogs.com/daizhj/archive/2008/08/27/1277449.html

 您可能对 [Silverlight] 的这些文章也感兴趣:

Silverlight专题(10)- WatermarkedTextBox使用
Silverlight技巧/诀窍: 创建和使用Silverlight和WPF 用户控件
Mozilla推出Silverlight与Flash的竞争对手-Prism
Silverlight专题(3)-使用Deep Zoom Composer
Silverlight 2 最终版正式发布
在Silverlight 2 beta1中使用IronPython等动态语言
Silverlight 2 Beta版的控件源代码可以下载了
Silverlight例子_多人手写讨论板
Silverlight专题(8)-布局介绍
Silverlight专题(9)-WCF通信(2)
1
查看完整版本: 在silverlight中定制自己的MessageBox(消息框)
Modify by pin5i DZNT_ExpandPackage 2.1.3258 2007-2008 pin5i.com
  Total Unique Visitors: