随笔分类 - Silverlight实用窍门序列
关于Silverlight实际使用中的一些初级小窍门。
摘要: 在Silverlight中的DataGrid我们经常会觉得表头太过于简单,对于某一些业务中我们可能需要展现多层次的表头。本文将结合DataGridTemplateColumn和Style解决这种问题。
一:引用命名空间 xmlns:dgCloumn="clr-namespace:System.Windows.Controls.Primitives;assembly=System.Windows.Controls.Data",不需要单独引用其他的DLL。这个命名空间是为了让我们声明的样式指定类型为DataGridColumnHeader。
阅读全文
摘要: Perst是一个简单、快速、便捷的面向Java和.Net的数据库。它可以直接将.net对象存储,在Silverlight不需要web service的方式进行读写,而是直接读写。
本文将编写一个实例进行perst的操作,下载一个PerstSilverlight.dll,然后引用它。
首先:在App.xaml.cs中Application_Startup()中建立Perst数据库的实例,在Application.Exit()中关闭Perst数据库。
阅读全文
摘要:一、DataGrid分组
在Silverlight的表格中可能需要对某一些数据进行分组以方便客户查看,我们使用PagedCollectionView集合作为数据源,然后通过设置其GroupDescriptions属性值,添加需要分组的实体集合属性,注意:如果需要两层分组则添加两个属性即可。
阅读全文
摘要:本文实例基于Silverlight实用窍门系列:71.Silverlight的Style基础之上。
一、Implicit Style(隐式样式):是不需要制定x:Key属性的Style,它的作用于是所有指定TagetType的控件,而不需要在具体的每个控件去指定其Style="{StaticResource KeyName}"。如以下代码的Style就没有指定x:Key属性,也不需要在任何ListBox控件上指定Style,会自动作用于其上:
阅读全文
摘要: 此文章实例基于Silverlight实用窍门系列:68.Silverlight的资源字典ResourceDictionary,如有数据源疑问请参考该文章。
在Silverlight中的Style相当于Html中的Css,是其一个重要的组成部分。它可以声明于UserControl.Resources也就是本页面资源内或者控件资源内,也可以声明于App.Xaml内或者ResourceDictionary字典资源内。
Style分为内联样式(控件本身样式)、页内级别样式(本身UserControl.Resources内样式)、应用程序域级别样式(App.Xaml内样式)、ResourceDictionary字典资源
Style的作用顺序是就近原则,比如一个控件先使用自身样式,然后在本页面内的资源寻找具有指定Key的样式,如果找到就使用此样式,没有就
阅读全文
摘要:ResourceDictionary是一个键控对象字典,可在 XAML 和代码中使用。在其中我们可以定义样式、模板等以方便在其他页面中随时调用。
首先我们新建一个ResourceDictionary页面如下图:
此时我们将此资源字典拷贝一份,仅仅只是将文字样式中的字体颜色从蓝色变为红色。然后我们在App.xaml中加载这两个资源字典,首先加载蓝色字体的资源字典A,然后我们再加载红色字体的资源字典B,代码如下:
阅读全文
摘要:在Silverlight中进行通讯,只能使用4502-4534之间的端口进行数据传输,另外Silverlight客户端会自动向943端口的服务器端发送一个“”的语句请求,然后服务器端943端口回发以下文件以许可Socket通讯。A.现在我们首先来看服务器端的代码,主要分为策略响应步骤和服务响应步骤。
策略步骤一:启动监听943端口是否有需要安全策略文件请求
策略步骤二:如果客户端请求是,则将安全策略文件作为bytes发送给客户端
服务步骤一:启动服务器端,监听4525端口,是否有Socket对话请求
服务步骤二:如果有客户端请求的连接,则发送消息告知客户端
阅读全文
摘要:在Silverlight中我们使用了数据模板,在很多时候也需要获取到数据模板上的控件,并且进行改变。本文使用的实例数据源和上节相同,如需了解请下载源码查看。
当然在这里我们可以分为获取数据模板原始控件和获取数据模板当前行控件两种。
一:获取数据模板原始控件。即通过“lbTempName.LoadContent()”的方式获取到原始数据模板的根元素(所有的DataTemplate数据模板都只有一个根元素,否则会报错)
阅读全文
摘要:在Silverlight中,我们的数据列表显示控件有ListBox、DataGrid等。对于显示出来的数据条目样式外观的管理是通过DataTemplate(数据模板)来完成的。本节将从DataTemplate基础说起如何使用DataTemplate。
阅读全文
摘要:
在Silverlight中我们经常看到数据绑定源由DataContext或者ItemsSource指定,那么他们之间的区别有哪些呢?
DataContext:从英文字母意思是数据上下文,在Silverlight中某个父级元素设置了DataContext,那么其子元素将可以继承并且使用DataContext中的属性。DataContext绑定的数据源可以是实体集合、实体、属性等。
ItemsSource:其数据源通常是实体集合(一列数据),无法让其子元素继承使用。
下面我们以一个实例主要讲解DataContext的用法,其中在父级元素Grid设置了一个DataContext属性绑定实体,该实体内部有一个属性为实体集合,此实体集合用于Grid的子元素ListBox的ItemsSource属性绑定
阅读全文
摘要: 在Silverlight中的MVVM模式下将前台页面和ViewModel界面交互分离开是通过本节所要讲述的Command实现的。我们自定义一个Command需要继承于ICommand接口并且实现这个接口。它有CanExecute()、Execute()方法和CanExecuteChanged事件组成。
CanExecute():判断是否继续执行操作。
Execute():执行操作的内容。
CanExecuteChanged:当出现影响是否应执行该命令的更改时发生。
首先:自定义的一个btnCommand。
阅读全文
摘要: 在Silverlight中的Action是指动作的意思,在Trigger触发器触发的时候,执行Action动作。在我们自定义Action的时候可以定义两种Action分别是继承于TargetedTriggerAction和TriggerAction的。
TriggerAction:继承于此的自定义Action动作的操作对象是关联采用此Action的对象。
TargetedTriggerAction:继承于此的自定义Action动作的操作对象可以是其他对象,由TagetName指定的对象。
本文在前一篇文章的实例基础上增加了一个自定义的Action。继承于TriggerAction和TargetedTriggerAction都可以重写以下三个方法:OnAttached()、OnDetachi
阅读全文
摘要: 在Silverlight应用程序和客户进行交互工作的时候可以不用写后台代码而通过Xaml代码来实现,在本文我们将学习了解Trigger触发器。
Trigger触发器:引发动作的因素,比如鼠标点击、键盘输入、鼠标双击、键盘Enter键敲入、鼠标中键滚动等等,这些都是触发动作交互的条件。
Trigger分为以下两类:
一、系统定义好的如EventTrigger、PropertyTrigger等。
二、用户自定义的Trigger,例如在SL4中是没有鼠标双击事件的,这时我们可以新建一个DoubleClickTrriger,通过定时器检测当点击页面同一个地方的时间间隔小于300毫秒的都属于鼠标触发动作。
EventTrigger主要是指定触发的事件名称,如下例是在MouseLeftButto
阅读全文
摘要: 在Silverlight中我们需要了解Behavior行为,它可以将一些常用的行为、效果等封装起来,在我们需要调用的时候可以非常方便的调用,主要需要引用System.Windows.Interactivity.DLL。它的运行本质是为采用了Behavior行为的源对象自动加载处理事件。
我们自定义一个Behavior行为需要做到以下三点方可成功。
一、继承于System.Windows.Interactivity.DLL中的Behavior类,其中的T可以更换为Image、TextBox、Label等所有的元素对象甚至是DependencyObject,表示这个自定义的Behavior可以作用于哪种控件。
二、重写覆盖OnAttached方法,在这个方法中需要为添加Behavior
阅读全文
摘要: 在本系列的第17篇文章中“Silverlight实用窍门系列:17.中心点联动多线的可拖动控件(绘制工程图、拓扑图基础) ”,制作了基本的中心联动图标。有园友对此图的扩展不是很清晰,所以在本文中我们将在那基础上做一个简易的拓扑图。
首先:将黄球为中心,绿球为圆圈的节点封装为一个子控件,然后提供一个接口,该接口可以接收一条外部的直线,并且这个接口可以指定在子控件中外部链接线的起始点还是结束点。
阅读全文
摘要: 在这里我们将实体集的绑定分为三类:
一、直接控件绑定。
二、DataTemplate模板绑定。
三、详细信息绑定。
首先:我们来看第一类直接控件绑定是对控件的ItemsSource属性进行绑定,然后使用SelectedValuePath指定选择值,DisplayMemberPath指定显示值的方式。Xaml代码如下:
阅读全文
摘要: 本文将简单讲述Silverlight中的Binding数据时的数据验证。
NotifyOnValidationError:是否在出现异常错误信息出现的时候激发BindingValidationError事件。
ValidatesOnExceptions:是否将异常信息作为错误信息显示出来。
ValidatesOnDataErrors:结合IDataErrorInfo接口以显示错误信息。
BindingValidationError:这是一个路由事件,当绑定数据的源对象A有错误的时候抛出异常让此事件接受并且触发,当源对象A没有BindingValidationError事件的时候让其父对象接受并且触发。
阅读全文
摘要: 本文将详细讲述Silverlight中Binding,包括Binding的属性和用法,Binding的数据流向。
Binding:一个完整的Binding过程是让源对象中的某个属性值通过一定流向规则进行转换和验证之后绑定到目标对象的某个属性上面。这个源对象由ElementName指定,源对象的属性由Path指定,流向规则由Mode指定,转换由Converter指定,验证由ValidatesOnDataErrors等指定。
首先我们来看Binding的属性如下:
ElementName:指定源对象的名称
Path:指定需要绑定的源对象的属性名称
Mode:指定Binding的数据流向规则
Converter:指定源对象的属性需要经过用户自定义的转换
阅读全文
摘要: 在Silverlight中我们使用Label、TextBlock、TextBox等控件的时候经常会遇到换行的问题,在这里我们以这三个典型的控件来看看换行方式。在本文中我们把换行方式分为自动换行和手动换行来看。
自动换行
Label控件在Silverlight中不支持自动换行。
TextBlock和TextBox可以通过设置TextWrapping="Wrap"属性让文字超过控件宽度时自动换行。
手动换行
Label、TextBlock、TextBox控件都可以在后台中使用Environment.NewLine属性来手动换行。
TextBlock可以在Xaml代码中使用标签来手动换行。
阅读全文
摘要: 在Silverlight中的MatrixTransform矩阵变换相对上篇文章所述的变换较复杂一些,但这种变换也更灵活。
MatrixTransform的实质:让需要变换的元素上的每一个像素点*矩阵得到这个点的新坐标。
下面我们来看看MatrixTransform的3*3矩阵元素图如下:其中的数字0、0、1在Silverlight中是固定不变的,所以我们可以不加理会,而M11,M12,M21,M22是我们需要相乘的坐标矩阵模块。如下图所示:
阅读全文