随笔分类 - 07.WPF/Silverlight
摘要:1、前言作为一个多年从事b/s开发的程序猿,曾先后使用过asp、asp.net做为主要服务端语言。不管是相对低级的asp也好,还是高级的asp.net也罢,都100%会遇到"数据绑定"问题。2、什么是“绑定”?广义来讲,如果服务端的数据需要在页面上呈现,并且这份数据需要与整个页面(或页面的某个部分)建立关联(不管是单向关联还是双向关联),这就是数据绑定。3、“赋值”是个好办法在asp年代,压根儿就没有控件这一说,所以服务端的数据呈现,基本上就是通过在页面中内嵌<%=xxx%>来实现的(xxx可理解为一个定义的变量),要改变显示的内容,最方便的方法就是给变量xxx
阅读全文
摘要:默认情况下,silverlight在调用wcf时,如果传递的参数长度大于8192字节,即8k,会提示Not Found错误。解决方法如下:1、wcf服务端修改web.config 如下:<?xml version="1.0"?><!-- For more information on how to configure your ASP.NET application, please visit http://go.microsoft.com/fwlink/?LinkId=169433 --><configuration> <syst
阅读全文
摘要:这是上一篇“Silverlight:双向绑定综合应用-自动更新集合汇总字段”的续篇。需求场景如下:一个公司,有N个员工,逢年过节时要搞一些抽奖活动,最终要公告收奖名单。"员工"类如下:namespace CollectionBinding{ /// <summary> /// 员工类 /// </summary> public class Employee : NotifyPropertyChangedObject { private string _name = ""; public string Name { set { _n
阅读全文
摘要:场景:有一家公司(类名:Company),它有N多员工(类名:Employee)。要在界面上用网格显示所有员工的姓名、工资,并且当操作用户在网格里对员工进行增减或修改其工资时,能自动汇总出员工工资的总和并显示出来。员工类 Employee代码如下: /// <summary> /// 员工类 /// </summary> public class Employee:INotifyPropertyChanged { private string _name = ""; public string Name { set { _name = value;
阅读全文
摘要:对象拖动是一个老生常谈的话题,在SL上要实现对象拖动,一般有三种思路:一、基于Canvas绝对定位布局的拖动这种处理方法最简单,修改对象的Canvas.Top与Canvas.Left即可,简单明了!在线案例: silverlight图片局部放大效果但是很多时候,我们采用的布局并不是Canvas,如果仅仅为了实现对象拖动,把整个布局重构,代价太大,有点得不偿失。二、基于对象Margin值的拖动Margin是对象的通用属性,通过改变Margin值理论上可在任何布局下,重新定位对象的位置。在线案例: silverlight:类似iBaidu,iGoogle的拖放功能缺点就是算法处理有些小复杂,初次看
阅读全文
摘要:某些场景下,想将一个对象快速隐藏、恢复,而且不影响布局。有一种方法:将对象的透明度在1与0之间切换。问:为什么不用Visibility? 答:这通常会导致重新布局,即剩余可显示的控件可能会产生移动。在一些特定场景,比如报表套打中,明显不适用。但是切换透明度的方法,有时候也不太好用,比如一个Border里再套其它控件,如果只是想快速去掉Border的边框显示,而保留Border中的控件继续呈现,就不适用了。(因为Border的透明度为0后,也会同步隐藏Border内部的控件)。解决方法就是:修改Border边框颜色值中的A分量,让其在0与255之间切换。 private void btnTest
阅读全文
摘要:如果SL是以浏览器模式运行的,要想找到满意的快捷键,通常会让人郁闷,因为浏览器会优先拦截掉大部分默认的快捷键,如果您还安装了某些IE插件,它们的优先级也比SL高,此外,如果还开着QQ等东东,QQ又会占用一些快捷键,这样剩下可用的快捷键就不多了。测试代码如下:void MainPage_KeyDown(object sender,KeyEventArgs e){ e.Handled = true; ModifierKeys keys = Keyboard.Modifiers; bool b1 = false; if ((e.Key >= Key.A && e.Key <
阅读全文
摘要:web前端的自动化测试,一般要能实现模拟鼠标点击、键盘录入、浏览器页面自动导航等功能,而且关键的是要对整个测试过程能自动录制并回放。vs2010的SP2已经集成了内置功能,但是目前尚未正式发布,所以本文就不介绍了。有兴趣的同学可参考以下文章:http://msdn.microsoft.com/zh-cn/library/gg413374http://www.cnblogs.com/scottxu/archive/2011/02/28/1967112.html除了微软自家即将推出的vs2010 sp2之外,不少第三方厂家也推出了相应的解决方案,比如Ranorex(园子里有兄弟写过入门文章:htt
阅读全文
摘要:默认情况下,vs2010并不能创建"Silverlight的单元测试"项目,不是vs2010做不到,只是MS没有推出模板而已。没关系,在联机模板里下载一个,如下图:安装完成以后,就能创建SL单元测试项目了,如下图小试一把:先创建一个SL类库项目,名为SLTools,里面写几行测试代码:namespace SLTools{ public static class MathHelper { public static int Add(int a, int b) { return a + b; } }}然后再创建一个SL单元测试项目,名为SLUnitTest,创建一个测试类,代码
阅读全文
摘要:做过WinForm数据库开发的人,一定有类似经历:DataGrid绑定后,如果允许行编辑,数据一顿修改后,想批量保存修改后的结果,通常是将DataGrid的所有行遍历,用FindControl找出其中的TextBox之类的控件,取值,然后处理,如果行模板中的控件变化了,可能之前的处理代码又要修改....Net发展到WPF/SL时代,有了双向绑定,这种痛苦经历已经一去不返了,我们只需要关注数据即可,GridView与数据源之间会相互通知各自的变化情况,批量保存时,不管GridView中的数据用户如何修改,也不用去理会行模板中的控件名是啥,直接对数据源进行处理即可。Xaml示例:<UserC
阅读全文
摘要:telerik的RadControls for Silverlight内置了以下几种主题样式:Office Black - 这是默认值,无需加载其它任何dll文件. Office Blue -需要引用 Telerik.Windows.Themes.Office_Blue.dll. Office Silver -需要引用 Telerik.Windows.Themes.Office_Silver.dll. Summer -需要引用 Telerik.Windows.Themes.Summer.dll. Vista -需要引用 Telerik.Windows.Themes.Vista.dll. Win
阅读全文
摘要:在Silverlight项目中,如果您想最大程度的减少xap包的大小,仅使用默认System.Xml命名空间下提供的功能来实现“XML序列化/反序列化”,恐怕XmlReader/XmlWriter将成为唯一选择了,下面是示例代码:using System.IO;using System.Text;using System.Xml;namespace slLib{ public class Person { private string _name = ""; /// <summary> /// 姓名 /// </summary> public str
阅读全文
摘要:前言:此乃水文,高手绕道.只要是稍微象样点的项目,一般都会先弄一个PageBase或UserControlBase做基类,然后其它页面/用户控件继承自它,标准的写法如下:先定义基类: PageBase.csusing System.Windows.Controls;namespace sl_test{ public class PageBase:UserControl { }}然后创建一个用户控件Page1继承自它:后端cs部分:namespace sl_test{ public partial class Page1 : PageBase { public Page1() { Initial
阅读全文
摘要:相信有不少人遇到过这个恶心的问题,xaml与cs编译正常,也能在浏览器里运行,但是就是无法在vs.net或blend里以【设计视图】方式打开,只能对着代码视图盲打。(个人觉得这是blend与vs.net的一个严重bug)出现这个问题的原因,多半是在构架函数里用到了HtmlPage,运行时SL是host在浏览器里的,HtmlPage即为将它嵌入的页面,而在vs或blend里预览时,宿主是IDE开发环境,并不是网页,因此找不到HtmlPage最终报错(这只是个人分析的,不保证正确.)解决办法,在构造函数最开始,用代码判断当前是否为设计视图,如果是,则不执行后面的代码:
阅读全文
摘要:默认情况下,如果SL项目引用了一些其它程序集(即通俗意义上的dll文件),在编译打包时,这些dll会全部打包到一个xap文件里,随着引用的dll文件越来越多,xap文件会越来越大。这还不是最严重的问题,如果确实需要使用这些dll,大就大吧,要用它容量肯定就会增加。但是如果多个SL项目都要引用相同的程序集时,这些dll会重复打包进每个xap文件,用户在加载多个xap时,实际上是重复下载了这部分dll文件,带宽使用率太低。为了改善这种情况,SL引用了"应用程序库缓存"的概念,在vs2010的SL项目中,打开SL项目的属性页,会看到一个选项:“通过使用应用程序库缓存减少XAP大小
阅读全文
摘要:直接上图:Xaml部分代码:<UserControl xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" x:Class="Telerik.Sample.AutoComplete" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns
阅读全文
摘要:相信很多人都听说过这句名言:garbage in ,garbage out ! 数据录入不规范(或错误)就象一颗定时炸弹,迟早会给系统带来麻烦,所以在数据录入时做好验证是很有必要的。相对传统asp.net开发而言,SL4中的数据验证要轻松很多(主要得益于Xaml的Binding特性),步骤如下:1、定义业务Model类时,在需要验证的属性setter中,写好业务逻辑,对于不合规范的value,要抛出异常!同时切记Model类要实现INotifyPropertyChanged接口,同时每个setter方法的最后,要显示调用OnPropertyChanged方法比如,我们要做一个会员注册填写资料的
阅读全文
摘要:如果展示类似这种比较cool的图片轮换效果,用RadTransitionControl控件就对了,它提供的过渡效果非常cool!原理并不复杂,可参见以前写的Silverlight之ListBox/Style学习笔记--ListBox版的图片轮换广告.xaml部分:<UserControl xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" x:Class="Telerik.Sample.Transition" xmlns="http://schemas.mic
阅读全文
摘要:几乎所有的业务系统都有弹出窗口,典型场景有二种 :1、简单的弹出一个对话框显示信息,比如下面这样:这个很简单,代码示例如下:DialogParameters pars = new DialogParameters(); pars.Header = "信息";pars.Content = "Hello World";RadWindow.Alert(pars);2、点击某条记录的“编辑”按钮,传入ID参数,弹出一个窗口,编辑保存后,将操作结果返回给父窗口这种场景下,要求:a)弹出窗口能接受到父窗口传过来的参数b)弹出窗口关闭时,父窗口要能区分出是通过什么操作
阅读全文
摘要:实际开发中控件的数据源肯定是动态绑定的,不可能在xaml里写死item项。既然要绑定,就先来几个实体类:上面是类图,各类的代码如下:BusinessBaseObjectusing System.ComponentModel;namespace BusinessObject{ public class BusinessBaseObject : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; /// <summary> /// 属性改变时触发事件 /// </su
阅读全文