文章标签 ‘Silverlight’

在WPF应用程序中,如果长时间使用,我们会发现WPF应用程序内存占用往往会达到上百兆的数字,由此可见使用.Net Framework内置的回收机制,并不能很好的解决应用程序占用内存的弊端。 不过,还好,Win32 API给了我们新的思路。我们可以调用SetProcessWorkingSetSize,达到内存释放的目的。 API函数: 调用: MSDN对这个函数的解释: 使用这个函数来设置应用程序最小和最大的运行空间,只会保留需要的内存。当应用程序被闲置或系统内存太低时,操作系统会自动调用这个机制来设置应用程序的内存。应用程序也可以使用 VirtualLock 来锁住一定范围的内存不被系统释放。 当你加大运行空间给应用程序,你能够得到的物理内存取决于系统,这会造成其他应用程序降低性能或系统总体降低性能,这也可能导致请求物理内存的操作失败,例如:建立 进程,线程,内核池,就必须小心的使用该函数。 实际上,这个函数并不能真正的释放内存,而只是重新分配改程序的内存占用,将暂时不需要的内容放进虚拟内存,当应用程序重新激活时,会将虚拟内存的内容重新加载到内存。所以,我们不宜过度频繁的调用该方法,这样只会使性能变低。 实际使用中,我们只需要当窗口关闭时,或者最小化时调用此方法即可解决内存不能释放的问题,该方法同样适用于Silverlight和Winform。

2010年4月14日21:21 没有评论

上一篇我们实现了Silverlight MVVM模式的增删改查,大家不难发现如果Command过多的话,可能造成代码过于臃肿,今天,我们来解决这个问题,我们使用一个DelegateCommand来代替所有的Command,代码如下: 我们构造Command的时候可以这样写 因为,我们的DelegateCommand是带一个参数的,所以我们每次构造都要传入一个object,这样,我们每次调用的时候只要传一个方法的参数就可以了,是不是方便了很多呢? 代码下载

2010年1月28日08:56 6 条评论

Silverlight中的MVVM设计模式,我们已经了解了,今天做一个Silverlight中的增删改查,非数据库的,目的在于让大家更深刻的认识MVVM设计模式,废话不说了,开始: 首先,我们建立一个Silverlight 3.0的项目,结构如下 接下来,我们建立用来模拟增删改查操作的数据层(Models)。 Person.cs是我们的实体类,为了保证属性修改通知,我们继承INotifyPropertyChanged类,代码如下 DataStore.cs是我们用来模拟数据存储的类,因为在Silverlight中我们采取绑定机制,数据对象修改要通知界面所以,数据集合采用了可通知的ObservableCollection集合类,同时实现了,增删改查方法,代码如下 接下来,我们建立视图层(Views),本项目一共分两个部分,一个是查询列表,一个修改、增加的界面效果如图: 我们建立两个文件PersonList.xaml(用户控件)和PersonInfo.xaml(Silverlight子窗口)。 PersonList.xaml PersonInfo.xaml 视图层建立好了,我们建立视图模块层(ViewModels),这个层的作用就是和视图层进行交流,达到视图层和业务层完全分离的部分。因为,我们有两个View,所以要建立两个ViewModel。 PersonListViewModel.cs PersonInfoViewModel.cs 接下来,我们建立Commands,视图层通过绑定机制执行命令,达到运行业务逻辑的目的。这里的命令是根据视图层的命令而定。 AddPersonCommand.cs DeletePersonCommand.cs ModifyPersonCommand.cs QueryPersonCommand.cs SavePersonCommand.cs SelectedPersonCommand.cs 接下来,我们在ViewModel里面加入这些命令 PersonListViewModel.cs PersonInfoViewModel.cs 最后,我们将ViewModel绑定到View。 PersonList.xaml.cs PersonList.xaml PersonInfo.xaml.cs PersonInfo.xaml 我们在MainPage.xaml加入代码,运行。。。 终于完了,MVVM设计模式实际上就是MVC的一种延伸,解决的目的就是视图层和业务层分离,能看完这篇文章的朋友,一定对MVVM有个深入的了解。 代码下载

2010年1月27日17:11 没有评论

Silverlight/WPF中有3个强大的布局控件,StackPanel、Canvas、Grid,从字面上理解,StackPanel是一种堆的布局,就是一个挨着一个的布局方式;Canvas是一种基于画板的布局方式,我们把控件放到面板上定义好坐标,这点跟Html中的Div布局类似,只是所有Div的Position都是相对定位的;Grid是一种表格方式的布局,这点很像是Html中的表格布局,把控件一个一个的放在表格里。 下面我们一一进行讲解: 1.StackPanel布局 StackPanel是一种堆的布局方式,其中Orientation属性,决定是水平排列,还是垂直排列,下面例子垂直排列 结果: 垂直排列改为: 结果: 2.Canvas布局 Canvas是一种基于面板的布局方式,我们需要设置好Canvas.Top,Canvas.Left,Canvas.ZIndex属性,即相对面板的顶端距离,左端距离和显示顺序,因为这种布局是绝对定位的,需要设置好Canvas面板的高度和宽度 结果: 3.Grid布局 Grid布局是一种基于表格的布局方式,这种方式更为灵活,可以处理复杂的布局方式,其中要先定义行和列,再设置Grid内控件的Grid.Row和Grid.Column属性,即该控件在表格的第几行,第几列,其中Grid.RowSpan和Grid.ColumnSpan属性分别为跨行和跨列,和Html相似。 结果: Silverlight/WPF给我们提供了非常强大灵活的布局方式,我们要灵活运用这三种布局方式实现更为复杂的布局。

2010年1月22日11:08 没有评论

上篇介绍了Silverlight代码方式添加动画,使用Storyboard对象完成。这种方式是Silverlight中最常见的添加动画的方式,下面介绍另外一种,这种方式是利用Silverlight的界面刷新机制,利用界面的刷新来进行属性设置,从而达到动画的效果。这种方式更适合做一些需要全局变化的项目,如射击游戏。 xaml代码 cs代码 运行就可以看到效果。。。举一反三我们可以用Timer实现同样的效果,(注Silverlight中的Timer并不在界面线程中,所以需要回调到主线程执行,或者直接用DispatcherTimer来完成定时执行的方法),隔几十毫秒执行这个方法,达到现在的效果。

2010年1月4日11:12 没有评论

Silverlight添加动画,我们做的就是让一个矩形移动。单击蓝色区域的的时候,矩形会移动到我们鼠标点击的位置 xaml添加如下代码 cs代码 完成了。。。这种方式相对于xaml的方式让人觉得更清爽,更适合coder。从上面我们可以看出Silverlight中的动画都是基于StoryBoard对象的,这个东西有点像flash中的时间线,在上面完成延时,变形,位置等操作。

2010年1月4日10:50 2 条评论

MVVM模式大家应该不陌生吧,陌生的快来看看,可是WPF/Silverlight开发中,必备的设计模式。 MVVM模式解决了,我们在开发WPF/Silverlight应用程序过程中产生的业务层、表示层比较混乱问题,使表示层和业务层完全分离。 早在2005年,John Gossman写了一篇关于Model-View-ViewModel模式的博文,这种模式被他所在的微软的项目组用来创建Expression Blend。 从上图可以看出来,View表示层就是我们通常的XAML,用来表示前台界面,ViewModel视图模块层的作用用来连接业务逻辑和视图层的关键部分,通常我们发出的命令或者事件都是通过这层传送给业务逻辑层的,Model就是我们的实际数据,业务逻辑代码等。 下面我们用一个Silverlight简单例子来讲解MVVM模式 这个程序就是实现简单查询,输入ID号,查询符合结果的内容

2009年12月31日12:12 没有评论

提起Silverlight就不能不提XAML,XAML是一种可扩展的应用程序标记语言(读作“zammel”),是一种可以直观的显示在Blend或者可视化XAML编辑器上的一种语言,就如同HTML语言显示在浏览器上一样。其优点就是可以让表现层和数据层完全分离。WPF也有相同的方式 这个是我们新建一个MainPage.xaml的页面,UserControl是他的根元素,说明了这个类继承自UserControl类,x:Class=”SilverlightApplication1.MainPage”,说明了,这个类的命名空间是SilverlightApplication1,类名是MainPage。 上面例子中,xmlns 属性专门指默认的 xmlns 命名空间。在默认的 xmlns 命名空间中,可以不使用前缀指定标记中的对象元素。 xmlns:x 属性指示另外一个 xmlns 命名空间,该命名空间映射 XAML 语言命名空间 http://schemas.microsoft.com/winfx/2006/xaml 。在具有此映射的文件的标记中引用时,XAML 规范定义的所需语言组件带有 x: 前缀。 <Page 根元素的开始对象元素 xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation” 默认 (WPF) 命名空间 就类似于如下的C#代码: using System.Windows; using System.Windows.Automation using System.Windows.Controls; using System.Windows.Controls.Primitives using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Windows.Forms.Integration using System.Windows.Ink using System.Windows.Media.Animation using [...]

2009年12月25日13:09 没有评论

在开始Silverlight之前,我们先了解一下什么是Silverlight? Silverlight就是微软为了对抗adobe的flash/flex的武器,是一种Web的RIA实现。 是一个跨浏览器的、跨平台的插件,为Web带来下一代媒体体验和丰富的交互式应用程序体验。Silverlight提供灵活的编程模型,支持JavaScript、.NET和其他的语言,并集成到现有的web应用程序中。Silverlight对运行在Mac或Windows上的主流浏览器提供高质量视频信息的快速、低成本的传递。 首先,配置Silverlight 3.0开发环境, 1.首先升级Visual Studio 2008到sp2。 2.下载并安装Silverlight3.0 Tools(http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=9442b0f2-7465-417a-88f3-5e7b5409e9dd) 3.下载并安装Silveright 3.0 SDK(http://www.microsoft.com/downloads/details.aspx?familyid=1EA49236-0DE7-41B1-81C8-A126FF39975B&displaylang=zh-cn) 全部安装完成后,我们就可以进行Silverlight开发了。。。 做一个Silverlight的Hello world! 打开VS2008,文件–>新建项目–>项目类型选择Silverlight,模板选择Silverlight应用程序,单击确定 因为Silverlight是基于浏览器运行的,所以IDE提示我们新建一个ASP.NET Web应用程序,默认就行,我们单击确定 文件结构如下 上面的HelloWorld项目就是我们新建的Silverlight项目,下面的HelloWorld.Web是刚才IDE帮我们建好的ASP.NET WEB应用程序 HelloWorld.Web项目说明 ClientBin文件夹 存放Silverlight文件的文件夹,上面的Silverlight项目编译后,会自动生成到这个文件夹 Silverlight.js Silverlight必备文件,用来和html页面交互使用 HelloWorldTestPage.aspx,HelloWorldTestPage.html 是承载Silverlight应用程序的文件,为什么会有一个html文件呢?因为Silverlight是跨平台的,说明Silverlight可以脱离asp.net web容器,运行 HelloWorld项目说明 App.xaml 应用程序入口 MainPage.xaml 页面文件,相当于一个Silverlight页面 我们在MainPage.xaml下面键入下面代码 编译运行,我们就可以在屏幕上看到Hello World!的文本。 是不是很简单呢?Silverlight更强大的功能我们后面介绍。。

2009年12月16日14:13 没有评论