WEB开发网
开发学院图形图像Flash Silverlight的弹出窗口--设计 阅读

Silverlight的弹出窗口--设计

 2009-02-25 11:56:37 来源:WEB开发网   
核心提示: BoxPage/MessagePage:PopupBox的实现,分别对应不同的功能,Silverlight的弹出窗口--设计(2),但基于此设计,并不存在太多与实现相关的代码,当然为了能够将遮罩层铺在控件上,我们要求控件是一个布局控件,因此不会作为重点进行讲述DragService:管理窗

BoxPage/MessagePage:PopupBox的实现,分别对应不同的功能,但基于此设计,并不存在太多与实现相关的代码,因此不会作为重点进行讲述

DragService:管理窗口的鼠标拖动功能,从外部引入拖动功能有利于展现与功能的解耦,同时所有与鼠标拖动相关的实现集中于一个类中,方便了BUG出现之后的定位与修改

PopupService

在我的设计中,我们不能通过直接的新建对象,如BoxPage box = new BoxPage();来生成一个弹出窗口。

当然最初的设计确实是可以使用new来创建的,但在日后的测试中发现,这样的创建会产生很多问题,在下面例举一二:

1. 每一个弹出窗口会拥有一个遮罩层,因此后开的弹出窗口一定比之前的在更上层,这就导致先打开的弹出窗口永远不可能被移到最上方,而在日常操作中,点击后面的窗口应当可以将这个窗口移到最前方

2. 过多的遮罩层导致了资源大量的占用,当打开5个以上弹出窗口时,应用程序的响应将出现明显变慢的现象

这种种缺陷,都将矛头指向了一处,即我们需要一个统一的环境来管理弹出窗口及其遮罩层,保证多个弹出窗口所拥有的遮罩层的“单例性”,因此就产生了通过PopupService这样一个“服务”来管理的策略,其管理方案如下:

1. 一个PopupService对应一个Control,此Control就是弹出窗口的拥有者

2. PopupService会产生一个遮罩层与此Control联系,并且在此后有弹出窗口时都会使用这唯一的一个遮罩层

3. 无论何时,对于同一个Control,将只会有一个PopupService进行服务

看到上面的方案后,我想大多数人都会发现,PopupService变成了“伪单例”或“局部单例”的类,因此就着“单例模式”的设计,我们肯定不能简单地通过new的构造来使用这个类,因此就引出了该类的一个静态方法GetServiceFor,此方法接收一个参数即PopupService的拥有者,当然为了能够将遮罩层铺在控件上,我们要求控件是一个布局控件,即Panel类型。

上一页  1 2 3 4 5 6  下一页

Tags:Silverlight 窗口 设计

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接