随笔分类 -  Silverlight实用窍门序列

关于Silverlight实际使用中的一些初级小窍门。
摘要:在Silverlight中我们时常会遇到需要加载其他已经制作完成的Silverlight程序的情况,在本节中我们使用WebClient下载XAP包形式的Silverlight程序,然后使用反射的方式解析出这个Silverlight的程序加载到本Silverlight程序中。步骤如下: 1 •首先我们使用WebClient类的OpenReadAsync(Uri)方法读取某个Uri位置的XAP文件,可以得到这个XAP的Stream值。 2 •使用Application.GetResourceStream(StreamResourceInfo, Uri)从指定 zip/XAP 包中的某个位置返回资. 阅读全文
posted @ 2011-03-29 16:02 .NET架构 阅读(3653) 评论(16) 推荐(6) 编辑
摘要:本文将建立一个最简单的WCF RIA Services访问数据库的实例,附带有数据库文件,可以在Sql Server中附加数据库,在本文中并没有采用ADO.NET实体数据模型绑定数据库,而是单独写一个类来连接数据库查询数据表并返回值,下面我们看详细步骤。 第一步:首先我们打开VS2010,新建一个Silverlight应用程序项目SLGetDataFromWCFRIA。 第二步:点击确定之后,在弹出的“新建Silverlight应用程序”窗口中,选中“启用 WCF RIA 服务”复选框然后确定。 第三步:在创建好的项目中,鼠标右键点击“SLGetDataFromWCFRIA.Web”项目,然. 阅读全文
posted @ 2011-03-28 15:39 .NET架构 阅读(7131) 评论(30) 推荐(6) 编辑
摘要:雷达扫描图中当雷达指针转动扫描到某一个点上的时候,判断这个点的CPU值是否已经超过60的警戒位置如果超过将此点设置为红色。 在Silverlight中我们的雷达指针是一直在做圆运动的,我们要随时检测雷达指针的位置,以及雷达是否碰撞到一个Device设备了。如果碰撞到了,就检测设备CPU值为多少?在这里我们需要解决两个问题。第一、如何随时观测雷达指针的当前位置?第二、如何检测雷达指针是否碰撞接触到了设备点? 针对第一个问题,需要做以下处理: •在本例中使用Timer控件,每隔50毫秒检测一次当前的雷达指针控件位置 •雷达指针的位置根据检测当前雷达指针旋转角度的正余弦函数得到左上角点的X、Y位置. 阅读全文
posted @ 2011-03-21 16:59 .NET架构 阅读(3058) 评论(2) 推荐(8) 编辑
摘要:实际项目中,我们模拟一个监控多台电脑的雷达扫描图效果。我们假设发现了很多台设备,这些设备具有CPU使用率这个属性,在雷达扫描的时候,如果CPU的值高于90则报警为红色。 本节实例建立在上一节的基础之上,在本节中我们将向雷达扫描图中随机投放多台设备点,这些点拥有X坐标和Y坐标的属性以设置它在雷达扫描图中的位置,并且有一个闪动的动画效果。新建一个自定义控件命名为Device.xaml。 第一步计算设备的X、Y坐标设置CPU的信号值Value。在这里使用Random对象rom.Next(Math.Sin(45)*250)函数来随机得到设备的X坐标和Y坐标,暂时先以(0,0)点为中心坐标的250半径. 阅读全文
posted @ 2011-03-19 13:58 .NET架构 阅读(2816) 评论(6) 推荐(6) 编辑
摘要:在现实生活中的雷达运行扫描到物体的某一些属性(比如:速度,频率)超过安全范围值将会报警。在实际的某一些项目中(比如监控系统),我们也想制作一个雷达扫描图来模拟扫描各种设备那么应该如何做呢? 我们将各种设备作为雷达需要扫描到的点,然后在每次扫描的时候扫描这些点,如果指针扫描碰撞到这些点的时候,会触发一个碰撞实际,以检测设备的项属性是否超过正常范围值。如果超过则让其闪亮不同的颜色。本节将讲诉如何制作一个雷达扫描图的基本框架如下。 第一步制作一个雷达图的背景 第二步雷达图的指针围绕中心点不停旋转 第三步为了让雷达图的效果看起来更美观一些,我们应该让指针后面绘画一个倾斜的拖影效果 首先我们使用Pho. 阅读全文
posted @ 2011-03-17 16:45 .NET架构 阅读(4941) 评论(5) 推荐(8) 编辑
摘要:在实际项目的多线程操作中我们用得最多的应该是ThreadPool线程池了,它可以非常方便的在线程池中使用线程来处理耗时的函数,且当函数操作完成之后会释放该线程以待下一次使用,而不用像Thread线程处理那么麻烦。 在每个应用程序中只能有一个线程池,所以线程池全是静态方法而不必实例化,当然线程池里的可用线程也是有限制的(比如:当前系统支持每次处理50个任务,我们要求它处理150个任务,那么它就会堵塞),所以系统中合理的利用线程池比一味的全用线程池更重要。 本节将讲诉一个在Silverlight中运行ThreadPool的最简单的操作方法,其流程如下: 第一步、ThreadPool.QueueU. 阅读全文
posted @ 2011-03-16 15:18 .NET架构 阅读(3061) 评论(9) 推荐(6) 编辑
摘要:在实际应用中,我们可能会遇到需要实时的显示某一些数据的情况,比如心电图、CPU当前使用率或者内存使用率等等。在Silverlight有一个Timer组件可以轻松的做到这一点,该组件可以每隔一段时间就调用一次需要处理的函数,在此这个函数中通过WebService,WCF等获取到相应的值,然后更新UI上的图表控件,以达到实时更新数据的作用。 现在我们来看看Timer组件的使用思路: 首先将现有的UI线程赋值出来,并且初始化Timer组件Timer timer=Timer(TimerCallback, Object, Int32, Int32) 这里有4个参数。 ●第一个参数是需要处理的函数的委托. 阅读全文
posted @ 2011-03-14 17:18 .NET架构 阅读(6415) 评论(8) 推荐(10) 编辑
摘要:在Silverlight中极其耗时的操作会导致UI进程假死,如果将复杂的操作和UI显示分离开而且我们需要了解这复杂操作的后台进程当前运行的进度如何?这里我们可以使用BackgroundWorker来解决这个问题。 BackgroundWorker是一个封装了的Thread组件,它能够让用户方便的开启一个独立的线程执行复杂和耗时的后台工作,随时报告当前完成程度,随时中止异步线程操作,还可以在异步操作状态报告中(ProgressChanged)和异步操作完成后(RunWorkerCompleted)的响应事件中访问UI线程。 BackgroundWorker的一些常用的属性、方法和事件如下: •. 阅读全文
posted @ 2011-03-11 17:01 .NET架构 阅读(4733) 评论(9) 推荐(7) 编辑
摘要:•在项目中时常会运行很多极其复杂的算法之后再更新UI控件,可是我们发现这会耗费大量的时间,几乎让UI进程假死。有什么办法可以让程序在后台完成这些复杂的算法,当算法完成的时候再去更新UI控件以避免UI进程假死的情况呢?对了,多线程技术!后台创建一个线程来进行复杂计算,就可以不耽误UI线程更新UI控件。可是如果直接在线程执行的函数里面去更新UI控件则会报“跨线程访问无效”的错误提示。下例中前台XAML文件里有两个UI控件label1和label2,在这里通过调用this.label1.Dispatcher.BeginInvoke方法执行labelInvoke委托的函数UpdateLabel(str 阅读全文
posted @ 2011-03-10 16:21 .NET架构 阅读(3850) 评论(6) 推荐(4) 编辑
摘要:在Silverlight程序(非Out of Browser模式)中是无法直接调用DLL的,但是很多的计算或者其他应用程序的调用中我们需要用到DLL的加载。比如调用DLL来识别身份证读卡器传输过来的信号,比如要和某Delph编写的程序数据通讯等等。本文将简单的自写一个DLL文件,然后通过调用此DLL自定义的一个GetNum函数计算传入得两个参数之和。 首先我们使用VS2010编写一个名为IlasLinkDll.dll的C++语言DLL文件(编写这个DLL的源码也会在本章结尾附带),其内部的关键代码如下:#ifdef MYLIBDLL#define MYLIBDLL extern " 阅读全文
posted @ 2011-03-09 15:33 .NET架构 阅读(4177) 评论(7) 推荐(5) 编辑
摘要:问题:笔者在项目中需要循环一个WebService方法N次,以获得N个结果数据,但是这过程中出现了一些问题,获取到的结果数据量大于笔者的预期且值为N*N。 Silverlight中常见的数据访问方式都是通过类似于WebService异步请求方式来获取的,相信大部分人都会这个WebService的请求方法,但是在某一个需要输入参数获取一个结果的WebService方法中,假设我们需要循环输入N个参数,然后获取N个结果集的情况下进行的操作会出现什么情况呢?本文将围绕循环WebService循环访问探讨一下Silverlight中的异步WebService数据请求过程。 首先新建一个Silverl. 阅读全文
posted @ 2011-03-08 15:37 .NET架构 阅读(2495) 评论(2) 推荐(5) 编辑
摘要:在实际项目中,我们通常会在XAML代码中创建控件的动画效果,但在某一些特殊情况下,需要后台进行动画效果的自定义修改。那么我们就需要用到本节中讲述的相关动画效果自创建知识。在Silverlight中常用的动画创建方式有4种分别为DoubleAnimation,ColorAnimation,PointAnimation,DoubleAnimationUsingKeyFrames。 •DoubleAnimation是控制控件的某一些Double值的属性的变化来形成动画的,比如让某个空间的Opactiy变大变小,就是透明度变大变小。 •ColorAnimation是控制控件的颜色的渐变,从绿色变蓝色. 阅读全文
posted @ 2011-03-07 14:35 .NET架构 阅读(3943) 评论(6) 推荐(7) 编辑
摘要:Silverlight不支持读写服务器端的硬盘,可是很多时候用户需要在Silverlight客户端往服务器端上传文件,那么本节将讲述Silverlight中最简单的上传文件的方式:在Silverlight客户端将文件序列化为Byte[]字符组,然后服务器端使用webService接收客户端的数据并且还原为文件即可。 下面我们新建一个Silverlight应用程序解决方案SLUpload,然后在SLUpload.Web项目中鼠标右键点击此项目,添加一个web服务页面Upload。在此页面中写入下面代码:/// <summary>/// 上传文件/// </summary> 阅读全文
posted @ 2011-03-04 14:43 .NET架构 阅读(4291) 评论(14) 推荐(8) 编辑
摘要:本章主要解决如何在DataGrid的行内绑定ComboBox和ListBox。在数据集方面,先建立一个城市实体类,这个实体类有3个属性,分别是城市名、城市区号、城市区县集合。城市区县集合是很多个区县的集合,所以区县类也是一个实体类包括2个属性分别为区县名和区县值。在这里城市类集合绑定到DataGrid中,区县类集合绑定到ComboBox和ListBox中。 首先我们建立城市实体类和区县实体类集合: /// <summary> /// 城市实体类 /// </summary> public class City { private string cityName; pri 阅读全文
posted @ 2011-03-03 14:25 .NET架构 阅读(6892) 评论(21) 推荐(5) 编辑
摘要:本节是继上节所讲述的基础上做出一些调整而来,如有疑问可参考上节文章。 在实际项目中可能会遇到绘制各类工程图或者网络拓扑图之类的情况,这类图基本上都是以设备加线的方式连接在一起的。那么一个中心设备连接多个外围设备的展示方式就是本节需要讲述的内容。上节已经讲了如何绘制一个以某点为圆心绘制出多条线,且线和线之间的角度需要相同来组成一个圆的图。在这个图的中心点加一个设备牵动所有的线的中心点的变化同时在外围点也加一个设备。中心设备和外围设备都可以随意拖动。中心设备的拖动牵连所有与中心设备关联的设备拖动。下面请看Silverlight运行预览图:在线演示 在Photoshop里面绘画两个不同颜色的球(绿色 阅读全文
posted @ 2011-03-02 13:45 .NET架构 阅读(4629) 评论(23) 推荐(6) 编辑
摘要:在Silverlight中有一个基础的类Line,此类用于绘制直线。在数学中两点的坐标确定即可绘制直线,所以Silverlight中的Line类有4个属性分别是X1、Y1、X2、Y2分别代表起始点的坐标1和线结尾点的坐标2。设置好了这两个点的坐标就可以显示出一条直线来。本文标题是以某点为圆心绘制出多条线,且线和线之间的角度需要相同来组成一个圆。比如说:我们假设有3条线,需要组成一个圆,那么每条线之间的角度就是360/3=120度,如果我们有8条线,那么线和线之间的角度就是360/8=45度。要实现这个效果需要自定义一个线控件,为此线控件设置中心点的X、Y坐标和线的长度(也就是形成的圆的半径长. 阅读全文
posted @ 2011-03-01 16:30 .NET架构 阅读(3324) 评论(0) 推荐(5) 编辑
摘要:图表应用于表现数据量,进行直观的对比,但是在某一些领域中如果数据之间大小差异过大,那么会出现某一些数据因为过小,而无法让用户看见的情况。例如在统计一组用户电脑的网络发包量的时候,有一些用户开启电脑几十个小时,有一些用户开启电脑几秒钟。很明显用户开机几十个小时的发包量巨大,而开机几秒钟的发包量极小,如果放在一个Visifire的图标中组成一个统计列的时候,发包量小的电脑几乎看不见了。这种情况下,我们就可以通过点击文字标注栏的Legend文字来确定某一个在图表上看不见的用户电脑的发包量。 首先我们设置一个实体类,该类包含(ComputerName,NetWorkNum)两个属性,分别代码电脑名和. 阅读全文
posted @ 2011-02-28 16:46 .NET架构 阅读(6073) 评论(7) 推荐(9) 编辑
摘要:在实际项目开展中,往往会牵扯到需要绘制图表的情况。而Visifire是一个比较美观大方的第三方图表控件,本文会讲述如何初步使用Visifire控件。 首先我们需要从Visifire的官方网站下载:http://www.visifire.com/,新建一个项目,引入SLVisifire.Charts.dll。在MainPage.xaml.cs代码中添加代码:using Visifire.Charts; 准备工作做好了,此时我在这里直接编写了一个函数如下: /// <summary> /// 创建一个图表 /// </summary> /// <param name= 阅读全文
posted @ 2011-02-26 17:09 .NET架构 阅读(14461) 评论(34) 推荐(13) 编辑
摘要:本节是基于第四节的源码基础上进行扩展的源码,故本节源码附带有鼠标右键和全屏功能。 在本节,我们将讲述一个小技巧:使用Popup浮动窗体控件模拟Tip悬浮效果。此技巧的原理是当鼠标移动到某个控件上面的时候会触发MouseMove事件,此时设置Popup控件显示出来。触发此事件时能够获知此时的鼠标坐标位置,我们根据鼠标位置的变化的同时移动Popup控件的HorizontalOffset属性(获取或设置目标原点与弹出项对齐点之间的水平距离)和VerticalOffset(获取或设置目标原点与弹出项对齐点之间的垂直距离)。如果鼠标移出自定义控件,那么设置Popup浮动窗体的IsOpen属性为fals. 阅读全文
posted @ 2011-02-25 16:58 .NET架构 阅读(7410) 评论(13) 推荐(11) 编辑
摘要:上一节有位园友提问:“如果我做一个自定义的Grid,跟普通的Grid一样,但是有双击事件,可以实现吗??比如我要用我的Grid,添加引用后直接用,就有双击事件。这样的控件可以做出来吗??” 答案当然是肯定的。在这里我制作了一个实例,因为本类需要完全拥有Grid控件所有的事件,属性和方法,所以它需要继承于Grid控件而不是继承于UserControl。鼠标右键点击项目名称-->“添加”-->“新建项”-->选择“类”-->修改文件名称为“NewGrid.cs”,再将public partial class NewGrid :UserControl修改为public par 阅读全文
posted @ 2011-02-24 14:00 .NET架构 阅读(2907) 评论(3) 推荐(7) 编辑