摘要: 四个角色:部件抽象接口角色(Component)、叶角色(Leaf)、组合类角色(Composite)、客户端角色(Client) 部件抽象接口角色(Component):定义组合类对象的公共行为、属性和管理子部件的方法接口。 叶角色(Leaf):实现Component的公共行为,但是无法管理子部件,为最终叶节点。 组合类角色(Composite):实现Component的公共行为,可以管理子节点(增、删、查)。 客户端角色(Client):通过Component控制整棵组合对象树。 阅读全文
posted @ 2011-09-02 10:15 .NET架构 阅读(2571) 评论(4) 推荐(9) 编辑
摘要: 四个角色:抽象原型角色(Prototype)、具体原型角色(ConcretePrototype)、原型管理器角色(PrototypeManager)、客户端角色(Client) 抽象原型角色(Prototype):定义原型的克隆方法接口 具体原型角色(ConcretePrototype):实现原型具体的克隆方法 原型管理器角色(PrototypeManager):负责具体原型的增、删、查和原型容器。 客户端角色(Client):实例化多个原型、并且通过原型的克隆接口克隆千千万万个子对象。 实现思路:首先实例化多个原型A、B、C、D,然后在客户端调用A原型的克隆接口即可获取到A原型的克隆子对象,并且可以这个对象的值。 类图: 阅读全文
posted @ 2011-08-30 10:36 .NET架构 阅读(3221) 评论(3) 推荐(9) 编辑
摘要: 三个角色:实体接口(Subject),真实实体(RealSubject),代理实体(Proxy) 实体接口(Subject):目标对象的抽象接口 真实实体(RealSubject):目标对象的具体实现. 代理实体(Proxy):同样实现Subject接口,但是在方法内部是调用真实实体的相应方法实现功能点,而非代理类自己去处理事务。 实现思路:真实实体和代理实体都继承并且实现同一个接口,在客户端调用代理实体以达到调用真实实体的目的。 类图: 阅读全文
posted @ 2011-08-25 10:06 .NET架构 阅读(3407) 评论(10) 推荐(10) 编辑
摘要: 4个角色:被观察者(Subject/目标对象接口),具体被观察者(ConcreteSubject/具体目标对象),观察者(Observer),具体观察者(ConcreteObserver) 被观察者(Subject/目标对象接口):目标对象的抽象接口 具体被观察者(ConcreteSubject/具体目标对象):目标对象的具体实现,能够添加、删除具体对象并且通知所有的观察者对象。 观察者:观察到目标对象的动作的时候有所反应的接口 具体观察者:观察者对象的具体实现,并且有相关动作。 实现思路:客户端创建目标对象,目标对象添加所有的观察者对象,然后目标对象更新,所有的观察者对象产生反应。 阅读全文
posted @ 2011-08-22 11:11 .NET架构 阅读(4019) 评论(11) 推荐(9) 编辑
摘要: 在Silverlight中的MatrixTransform矩阵变换相对上篇文章所述的变换较复杂一些,但这种变换也更灵活。 MatrixTransform的实质:让需要变换的元素上的每一个像素点*矩阵得到这个点的新坐标。 下面我们来看看MatrixTransform的3*3矩阵元素图如下:其中的数字0、0、1在Silverlight中是固定不变的,所以我们可以不加理会,而M11,M12,M21,M22是我们需要相乘的坐标矩阵模块。如下图所示: 阅读全文
posted @ 2011-08-16 10:05 .NET架构 阅读(3874) 评论(14) 推荐(4) 编辑
摘要: 在Silverlight的变换中有五种类型,分别是RotateTransform:旋转变换、ScaleTransform:缩放变换、SkewTransform:倾斜变换、TranslateTransform:移动变换、TransformGroup:变换组、MatrixTransform:矩阵变换,在这里我们分别讲解这五种变换的使用方法以便在实际应用中更好的应用。 RotateTransform:旋转变换 使用方法:设置Angle属性为需要转换的角度,设置其中心点为CenterX、CentyY,这个是X、Y轴的二维平面旋转。 下面我们来看一个Demo实例,可以设置让图标按照某一个角度旋转,其代码如下: 阅读全文
posted @ 2011-08-15 10:06 .NET架构 阅读(7122) 评论(5) 推荐(4) 编辑
摘要: 在本文将以MVVM Light Toolkit为例讲解MVVM框架在现实中的使用入门,首先我们在http://mvvmlight.codeplex.com/下载它的MVVM框架下来。也可以通过 http://files.cnblogs.com/chengxingliang/GalaSoft.MvvmLight.V3.rar 下载MVVM Light Toolkit。然后我们安装这个安装包,然后重新打开VS2010,新建一个项目,Tip:MVVM分为Model、ViewMode、View三层。 •Model是实体类层,它存放所有需要用到的实体类。 •ViewMode层是逻辑层,操作所有Model层和View界面层的逻辑运算并且作为一个大的实体类,提供属性绑定到View层上面去。 •View层是界 阅读全文
posted @ 2011-08-08 10:11 .NET架构 阅读(8101) 评论(8) 推荐(8) 编辑
摘要: 本节将讲述三个Silverlight中应用的小技巧:Silverlight页面的放大缩小、Silverlight操作Html、Html操作Silverlight控件。 一、Silverlight页面的放大缩小 首先对于Silverlight页面的放大缩小我们可以使用ScaleTransform对Canvas控件进行设置。这样所有在该Canvas控件内的所有子控件都被放大缩小。 在这里我们使用Silverlight中的按钮,通过HtmlElement类操作Html中的ID为Text1的input控件的Value属性值。 在这里我们通过GetElementById方法找到Html控件然后为它增加一个onchange事件,在这个事件中获取到控件的值并且设置到Silverlight控件中去。 阅读全文
posted @ 2011-08-03 10:19 .NET架构 阅读(5344) 评论(8) 推荐(6) 编辑
摘要: 在Silverlight中我们有时候需要手工绘制线条或者直线等,在这里我们认识一下InkPresenter控件,它将支持用户使用鼠标、手写板等工具来绘制图形或者笔迹,用途为涂鸦、笔迹确认等等。 InkPresenter是继承于Canvas控件的支持所有的Canvas属性,并且其内部还可以嵌套显示其他控件。InkPresenter控件的显示分为三层:底层是InkPresenter的Background、中间层是InkPresenter的Children属性的控件、最后才是Strokes属性中的笔画层。 对于Strokes属性中的笔画Stroke我们可以设置它的颜色、粗细、外边框颜色等等属性以获得满意的笔画类型。下面我们来看看如何使用InkPresenter控件,首先我们来看Xaml代码如下 阅读全文
posted @ 2011-07-28 10:18 .NET架构 阅读(4018) 评论(7) 推荐(8) 编辑
摘要: Silverlight中的独立存储是其内部的可信任的可访问文件空间,在这里你可以使用Silverlight随意的创建、读取、写入、删除目录和文件,它有一些类似于Cookie,但是它可以在客户端保存大量的数据。这个空间默认是1M,如果不够的时候可以申请扩大容量。 网站+用户+应用程序定位一个独立存储,也就是说必须得相同网站,相同用户,相同应用程序才能够访问这个独立的存储空间。独立存储是IsolatedStorageFile密封类来进行设置的,这个类分布在命名空间System.IO.IsolatedStorag。我们引用System.IO命名空间对文件进行操作。下面我们来看一个演示的Xaml代码如下: 阅读全文
posted @ 2011-07-25 10:03 .NET架构 阅读(2417) 评论(11) 推荐(6) 编辑
摘要: 在Silverlight中的DataGrid控件使用中我们想点击其中一行并且看这一行的详细信息应该如何做呢?而且这个详细信息是多行的数据,而非简单的几个属性。 在这里我们使用DataGrid.RowDetailsTemplate来设置或者获取行详细信息。首先我们准备一个DataGrid命名为A,设置其RowDetailsVisibilityMode="VisibleWhenSelected" (行详细信息模板的显示模式是当这行被选中的时候展开这行的详细信息。)然后再为A设置DataGrid.RowDetailsTemplate模板,并且在这个模板中添加一个DataGrid命名为B,这就是前台的XAML代码,在后台中我们设置一个实体集AList绑定到A的DataGrid,然后在AList实体集中有一个属性是BList,这个就是多行的详细信息。将BLis 阅读全文
posted @ 2011-07-22 10:06 .NET架构 阅读(6748) 评论(22) 推荐(8) 编辑
摘要: 问题一:在某一些情况下,我们使用MVVM模式的时候,对于某一个字段(AgeField)需要在前台的很多个控件(A、B、C、D、E)进行绑定,但是如何能够让我们后台字段名改变的时候能够非常方便的改变所有使用了这个字段的控件呢? 回答:使用Element to Element Binding,将AgeFiled绑定到A控件,然后再让B、C、D、E控件绑定A控件的使用AgeField字段的属性。 例如:字段(AgeField)的数据是年龄大小,A、B、C、D、E控件分别是Ellipse、Label、Slider、TextBox、ProgressBar,这些字段的Width、Value或者Text值按照常规的做法,这几个控件都是在MVVM模式下都是绑定的AgeField。但是这个字段名在后期代码维护的时候修改为Age了,我们就不 阅读全文
posted @ 2011-07-18 10:35 .NET架构 阅读(5786) 评论(3) 推荐(6) 编辑
摘要: 4个角色:指挥者(Director),建造者(Builder),具体建造者(ConcreteBuilder),产品(Product) 产品:需要创建的对象产品 具体建造者:创建产品的实例并且实现建造者多个方法对产品进行装配 建造者:本质为抽象类,里面的抽象方法供具体建造者重写,声明产品的引用 指挥者:调用建造者抽象类以及其方法 实现思路:客户端创建一个指挥者,并且实例化需要的产品的具体建造者,然后指挥者调用具体建造者的实例即将产品生产出来。 类图: 阅读全文
posted @ 2011-07-14 09:59 .NET架构 阅读(8541) 评论(20) 推荐(31) 编辑
摘要: 本文主要讲解如何使用IValueConverter和TypeConverter。我们通过两个思考问题来引入如何使用IValueConverter和TypeConverter! IValueConverter主要用于将数据源的数据转换为需要在界面上显示的数据,例如:将Url地址转换为图片显示到界面上、将float类型数据显示为货币类型、bool值和Visibility转换等等。 TypeConverter主要用于在XAML代码中的字符串类型转换为其他类型的数值,比如将一段字符串转为Double类型以供Width属性使用。 思考一:我的数据集合的其中一个集合中的属性为某个图片的URL,如何将这个URL地址转换为图片显示到DataGrid行中呢? IValueConverter的使用方法: 阅读全文
posted @ 2011-07-12 10:04 .NET架构 阅读(3607) 评论(6) 推荐(8) 编辑
摘要: 本节即将新接触的CIL操作符如下: br.s IL_003c 无条件地将控制转移到目标指令(短格式) clt 从计算堆栈的顶部弹出当前值并将其存储到索引 2 处的局部变量列表中 ldloca.s CS$5$0001 将位于特定索引处的局部变量的地址加载到计算堆栈上(短格式) leave.s 退出受保护的代码区域,无条件将控制转移到目标指令(缩写形式) constrained. 约束要对其进行虚方法调用的类型 endfinally 将控制从异常块的 fault 或 finally 子句转移回公共语言结构 (CLI) 异常处理程序 阅读全文
posted @ 2011-07-07 12:22 .NET架构 阅读(2180) 评论(4) 推荐(4) 编辑
摘要: 本节将接触几个新的CIL操作码如下 ldc.i4.0 将整数值 0 作为 int32 推送到计算堆栈上 Ceq 比较两个值。如果这两个值相等,则将整数值 1 (int32) 推送到计算堆栈上;否则,将 0 (int32) 推送到计算堆栈上。 Brtrue.s 如果 value 为 true、非空或非零,则将控制转移到目标指令(短格式)。 Brfalse.S 如果 value 为 false、空引用或零,则将控制转移到目标指令。 Callvirt 对对象调用后期绑定方法,并且将返回值推送到计算堆栈上。 Ldsfld 将静态字段的值推送到计算 阅读全文
posted @ 2011-07-04 11:17 .NET架构 阅读(4379) 评论(15) 推荐(6) 编辑
摘要: 一、在.NET中string是一种特殊的引用类型,它一旦被赋值在堆上的地址即不可改变,之后对其进行的字符串相加等操作之后的结果都指向另外一个堆地址,而非原来的字符串地址。现在我们看以下一段C#代码以观察string在实际编码过程中的使用。二、上面的C#生成的CIL代码如下,三、首先我们看两种字符串的构造方式的不同而引起的效能变化。结论:通过上面两种方式构造方式的CIL我们可以很清晰的看出第二种方式的效率要高于第一种的字符串构造方式。所以我们在实际的编码过程中可以考虑尽量使用第二种编码方式。四、大家都知道装箱操作会在堆上寻找一个控件来存储值类型的值。会耗费大量的时间。所以下面我们来看两个实例代码 阅读全文
posted @ 2011-06-30 11:25 .NET架构 阅读(2549) 评论(25) 推荐(5) 编辑
摘要: 一、在.NET中,内存分配是非常重要的一大块,为了更深入的了解其分配情况,本节中我们将利用一个实例来查看其CIL语言分析内存的分配情况。下面我们首先来看实例C#源码如,二、接下来我们看这段程序的CIL代码,通过这段代码我们大概能够猜出分别代表了什么意思。 首先我们看第一段CIL代码所示,声明了程序的进入点,以及定义了5个局部的变量其索引值分别为0,1,2,3,4,变量名为a,b,c,d,e。其次我们来看第二段CIL代码,这是值类型的直接存储在栈中的数据,直接取出相加即可。 阅读全文
posted @ 2011-06-29 11:28 .NET架构 阅读(2628) 评论(12) 推荐(9) 编辑
摘要: 一、CIL的基本构成 CIL由CIL指令(directive)、CIL特性(attribute)、CIL操作码(opcode)组成。CIL指令是用于描述.NET程序集总体结构的标记,并且通知CIL编译器如何定义在程序集中用到的命名空间、类、成员的。它以(.)一个点号开头,例如:.namespace、.class、.property、.method等构成。CIL特性是由于CIL指令并不能完全说明.NET成员和类的情况下,针对CIL指令进行补充说明成员或者类的特性的。比如一个类可能是公共的,集成的。它就需要用public特性、extends特性或者implements特性对类的.class指令进行修饰的补充说明。 阅读全文
posted @ 2011-06-28 10:48 .NET架构 阅读(4908) 评论(8) 推荐(9) 编辑
摘要: CIL简介:CIL(Common Intermediate Language)中文名为通用中间语言,注意它曾经被称为微软中间语言或MSIL,它是一种类似于JAVA字节码的语言。在微软语言平台中,不管程序员使用C#、VB.NET或者J#等语言编写的程序进行编译的时候,编译器将这几种语言编写的源代码编译为CIL(微软中间语言)语言,此时再通过JIL(Just In Time实时编译器)编译为针对各种不同CPU的指令(注意因为是实时的编译器,所以它运行的时候是只运行需要编译的CIL语言段,而不是全部一下编译完,这是为了提高效率。) 阅读全文
posted @ 2011-06-27 10:16 .NET架构 阅读(5172) 评论(13) 推荐(10) 编辑
摘要: 在本节中我们将讲述如何通过WinDbg工具对Silverlight应用程序进行调试,我们可以判断其无效过期的引用或者事件,将其释放掉,以达到及时释放内存的作用。首先我们需要下载WinDbg工具,在http://msdl.microsoft.com/download/symbols/debuggers/dbg_x86_6.11.1.402.msi即可下载32位的WinDbg工具。并且安装好这个工具。然后我们准备一个最简单的Silverlight应用程序,其Xaml代码如下: 阅读全文
posted @ 2011-06-13 11:03 .NET架构 阅读(2380) 评论(6) 推荐(6) 编辑
摘要: 在Silvelight 4.0的项目中我们也需要制作单元测试以保证项目的质量,本节将讲诉如何创建一个项目进行单元测试。 一、创建一个名为SL4UnitAPP的Silverlight 应用程序,不需要Web承载网站。 二、然后鼠标右键点击SL4UnitAPP解决方案,添加一个名为SL4UnitTest的Silverlight Unit Test Application。 三、在平时VS2010 创建项目时无法添加一个Silverlight Unit Test Application,所以我们需要将C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\下的ItemTemplates文件夹和ProjectTemplates文件夹都拷贝到D:\My Documents\ 阅读全文
posted @ 2011-06-07 10:42 .NET架构 阅读(1991) 评论(4) 推荐(4) 编辑
摘要: 在本实例中我们将从ListBox中拖出一个图标到另外一个ListBox中,这是一个比较有用的小功能,在这里我们首先来看运行效果(点击下面的图片即可拖动左边的图标到右边的ListBox中去)。 实现过程是:1、我们把这个过程分为鼠标左键点击到左边的图标,使用Image_MouseLeftButtonDown事件。(设置一个标识符,标示当前已经被鼠标点击下去)          2、点击到这个图标不放,在整个Canvas内移动,使用LayoutRoot_MouseMove事件(此时设置一个图标跟随鼠标的位置移动,这个图标既是被点击的图标)。          3、当鼠标移动到右边的ListBox范围之内时放开鼠标左键,使用LayoutRoot_MouseLeftButtonUp事件(当鼠标左键弹起的时候,判断标识符是否为true,如果是的话表示有图 阅读全文
posted @ 2011-05-30 10:37 .NET架构 阅读(4504) 评论(5) 推荐(6) 编辑
摘要: 在最近的几个月内整理出了Silverlight的一些相关的比较实用的功能讲解文章,并且随着Silverlight 5 beta版本的发布整理出的新特性系列文章,在这里做一个总的概括和索引,以方便大家观看。   Silverlight 5 beta新特性探索系列 内容简介:Silverlight 5 beta新特性探索系列是在Silverlight 5 beta版出现之后第一时间内写出的一个探索新特性的文章,对于绝大部分Silverlight 5 beta的新特性都在此系列文章中有所讲解。 适用于广大Silverlight爱好者或者即将采用Silverlight 5启动新项目的项目开发人员。每篇文章都有实例源码下载运行。 阅读全文
posted @ 2011-05-27 10:01 .NET架构 阅读(9594) 评论(17) 推荐(20) 编辑
摘要: 本实例将读取拖动到Silverlight的ListBox控件中的txt文件或者Jpg文件。在本实例中将讲如果通过UIelementA.Drop事件获取到拖动到UIelementA上的文件的相关名称以及路径等信息,以处理多个外部文件拖动到Silverlight中的相关一些小技巧的应用和操作。 在本例中我们设置外部文件拖动到ListBox中去,首先我们要设置ListBox的AllowDrop="True",再添加一个Drop事件Drop="listBox1_Drop",这样在外部文件拖动到ListBox中的时候可以触发Drop事件。 首先我们来看MainPage.xaml代码如下所示: 在上面有一个TextBlock显示读取到的Txt文件内容,还有一个Image控件显示读取到的图片内容。下面我们看MainPage.xaml.c 阅读全文
posted @ 2011-05-23 10:18 .NET架构 阅读(2549) 评论(16) 推荐(8) 编辑