百度空间 | 百度首页 
 
文章列表
 
您正在查看 "Silverlight" 分类下的文章

2009年11月08日 星期日 18:55

Silverlight 2中有三种网络通信机制WCF、通过WebClientHttpWebRequest的直接Http通信、使用Sockets的相对原生态的通信。在Silverlight 3中增加了本地通信模型。

    

使用WCF最基本的必须了解ABCAddress,Binging,Contract),在Windows7下自动生成的web.config与其他OS略有不同。

   

WebClient可方便的用来下载zip资源等,利用GET操作可下载StringStream,通过UploadStringAsync方法可以支持POST操作。

     

如果想利用HTTP完成更复杂的操作或请求,比如涉及权限,cookies,安全等,则需要使用HttpWebRequestHttpWebRequestWebRequest的子类,支持HTTPHTTPS协议,并受益于浏览器的能力。

   

HTTP协议也有一些不足,它是建立在TCP之上相对较为高级别的标准,因此不可能比raw connection性能更高HTTP多用于从服务端获取数据,而服务端想从客户端得到反馈则相对较难,因此不太适合需要实时通信的应用程序。这时就需要Sockets出马,Sockets所需的跨域策略文件略有不同,在Silverlight中也有诸多限制,比如端口号等。

    

        

本地通信:通过本地消息传递,可以在单个计算机上运行的多个Silverlight应用程序之间通信。应用场景比如同在一个页面上的多个Silverlight应用程序交互,创建具有跨越侧栏广告的动画效果的基于 Silverlight 的横幅广告,并且使用本地消息传递来协调过渡。该特性尤其适用OOB(浏览器外)应用程序。和Sockets不同的是,本地连接消息是单向的,fire-and-forget式的,消息发送者不知道消息是否被接收,除非是消息接收者发回确认信息。

         

ASP.NET网站中构建Web Service有以下几种方式:generic handler(后缀.ashx),ASP.NET Web Service(后缀.asmx),启用了Silverlight功能的WCF服务等。

    

Web Service返回的数据常有以下几种格式:XMLJSONRSS/AtomSOAP消息。处理这些不同的数据可能用到的相关技术有LINQ、正则表达式、序列化等。

   

此外,还需要注意的就是跨域问题,另外篇章再总结。

类别:Silverlight | 评论(3) | 浏览()
 
2009年09月26日 星期六 22:23

Silverlight 3 支持多点触控,想要测试这个功能,当然必须有支持触控的硬件设备,基础平台比如Windows 7等的支持也是必不可少的。然而即便所有条件必备,Silverlight 3 目前对触控的支持还相对有限,比如不支持笔势(Gestures)。尽管理论可以用(TouchAction)DownMoveUp来模拟笔势,但目前得到的效果非常有限,且不尽入人意。这个功能多少有些鸡肋的感觉。

        

哪怕借助Google了好多页,找到的资料乏善可陈,列举如下:

官方文档“多点触控输入”:可以查看概况和相关API详情。TimheuerSilverlight 3 Multi-touch: The Basics”:简单讲解,有示例Demo,可以看看基本的代码运用。

       

Silverlight 3 and WPF Multi-Touch”:codeplex上开源的库,主页上有示例和使用说明,功能局限,只有缩放和拖曳笔势的模拟。澳大利亚的soulsolutions做了一个基于Bing Maps的应用,基于刚才的类库做了两点扩充,但是体验仍还是比较不友好。

       

MIRIA SDK”是codeplex上另外一个开源库,针对Silverlight 3做了一些笔势的增强,支持以下笔势。相对而言,用起来更加方便一些。但也有两个问题,第一,笔势之间冲突,比如RotateScale经常同时触发;第二:尽管宣称不影响鼠标事件提升,但仅限于它这个SDK中。用MIRIA SDK监听后无法删除事件的订阅,导致外部原有的鼠标事件无法得到相应的提升。

- Hold (hold a finger down for a little)

- Tap (quickly put on and lift up a finger)

- Translate (move your fingers)

- Rotate (rotate gesture with two fingers)

- Scale (pinch in/out the screen with two fingers)

- Slide North/East/South/West/Nw/Ne/Sw/Se (slide two fingers in the desired direction)

         

综上所述,Silverlight 3的多点触控最好就是直接利用鼠标提升的特性,也就是一个指头模拟鼠标点来点去,原来用鼠标可以进行的多种多样的工作,现在用指头触摸来完成。多点触控,看起来不错的也就是用两个指头(两点)pinch in/out进行缩放。

类别:Silverlight | 评论(1) | 浏览()
 
2009年08月31日 星期一 23:18

TriggersActions Behaviors使得在Silverlight应用程序中进行交互操作变得更为容易,XAML即可完成诸多功能,可以减去复写后台代码的烦恼,需要借助Blend 3 SDK的System.Windows.Interactivity.dll程序集。

      

TriggersActions是因果关系模型,一个触发器可以调用一个或多个操作,而Behaviors则大致相当于两者的一个小综合体。他们的类关系图如下:


   

所谓Trigger,就是监听某些条件的变化,比如事件触发,属性值改变等,进而触发一些动作的发生。这些Triggers可能是EventTriggerCollisionTrigger 等,当然更多的或许是创建自己的Trigger。自定义Trigger只需要从TriggerBase<DependencyObject>继承,并覆盖OnAttachedOnDetaching方法即可。


所谓Action,就是去执行某些操作。可以根据需要创建自己的Action,常见的需要创建Action的情况有:改变属性、调用方法、打开窗口、导航到某个页面、设置焦点等。自定义Action可从 TriggerAction<DependencyObject>TargetedTriggerAction<DependencyObject>继承,区别在于操作对象是关联对象还是特定的目标对象,实现时覆盖Invoke方法即可。

       

TriggersActions理论是可以相互独立,任意组合的。当你在定义时发现有些逻辑上需要相互确定或者假定发生时,Behaviors需要登台了。Behaviors乍看起来像是Actions,但它是逻辑独立功能自备的独立单元,它无需触发器,定义Behavior时就已经确定。

      

创建自定义Behavior需要从Behavior<DependencyObject>继承,并覆盖OnAttachedOnDetaching方法,复杂行为时需要用到ICommand. 当然在Blend 3中已经预定义了不少Behaviors,如MouseDragElementBehavior等。可以利用,同时在

Expression Gallery 也可以共享他人或自己的Behavior。(PSEffects Themes也可以在这里共享。)

        

整理收藏,做些笔记,故而没有具体代码。强烈推荐"Behaviors and Triggers in Silverlight 3"(中文翻译)一文,详细而完整解释了行为、触发器、操作等相关内容,并附有源代码示例。"An Introduction to Behaviors, Triggers, and Actions"一文来自Blend 3官方博客,概念清晰,描述了设计他们的意图。"Using Behaviors : A Quick Walkthroug"是入门级别的文章,Blend 3使用Behaviors一步一步学,附有图片。

类别:Silverlight | 评论(0) | 浏览()
 
2009年08月12日 星期三 22:16

Silverlight 2内置并不支持鼠标滚轮事件,但在DeepZoom Composer中自动生成了一个MouseWheelHelper类供我们使用,有个缺陷就是全凭模式下无法触发滚轮事件。Silverlight 3已经完全支持。

 

双击事件,目前Silverlight 3也不支持,网上也有不少类似的DblClickHelper类。判断双击的标准一般是连续两次点击时间小于某个阈值。这并不完美,比如我们习惯双击放大地图,但当快速点击拖动漫游时,小于阈值时又漫游了又放大了。因此需要再加一个判断,连续点击的屏幕坐标要近似相等。据此,SharpGIS总结了一个双击辅助类,其中利用了C#的扩展方法特性和Silverlight的依赖项属性,用法也比较简单。

 

在进行浏览地图拉框放大或拉框缩小等操作时,我们已经习惯于自定义鼠标形状。然而这对于Silverlight来说并不能直接的实现。因为其提供的Cursors枚举,只是自带的。我们想与扩展,只能通过绕道的方式来实现鼠标形状的自定义。这种方式尽管也能达到目的,终究感觉不是那么自如。谁有好的方法吱一声。

 

对于鼠标和键盘事件,大多时候只是辅助作用,业务数据和业务逻辑才是大头。不过有些人总是喜欢说桌面有的东西你Web也得有,话说也想在浏览器里实现桌面软件的各种功能,我老早以前也是这样的想法,后来不了。对有些东西,要知其能,也要知其不能。

类别:Silverlight | 评论(0) | 浏览()
 
2009年08月10日 星期一 23:20
Charles Petzold,《3D Programming for Windows》的作者,最近写了数篇博客,玩了玩Silverlight 3的3D效果。就其成果,做个笔记,思考如何应用在3D地图中,尽管Silverlight 3的3D仍旧是2D视图的效果,但比所谓的Realspace……好好写博客,点点滴滴学习,省略号代表欲言又止,不再扯淡。


最简单的,利用PlaneProjection,在XAML中即可完成一个立方体线框的旋转动画。当然在XAML中触发动画,不可避免的用到Triggers。实现原理也易于理解,四个矩形,旋转并放在一定的位置,然后沿着Y轴旋转做动画。PlaneProjection的12种属性也无需全部上场。示例页面

再接再厉,Charles Petzold利用Canvas.Zindex,并计算相关的阴影和光线,做出了实心的立方体动画。在示例页面,也可手动操作体验,不过算法用的是正射投影。

用透视投影来做个垂直六面体如何?请看示例,不过有点吃CPU。看来Charles 年纪也一大把了,探索精神值得晚生学习。

正十二面体的算法肯定是更复杂了,不过由于Charles Petzold一直在研究3D,从他的书中改吧改吧,拿来Silverlight 中也能用。示例页面

如果继续正多边形的话,那就剩下了正二十面体了,继续保持关注。
类别:Silverlight | 评论(2) | 浏览()
 
     
 
 
文章分类
 
 
 
 
Gis(56)
 
 
 
 
 
 
 
     
 
文章存档
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
     
 
最新文章评论
   

强大
 

这个重要。学习了~
 

不错
 

写的挺详细的,不错
 

这个问题产品部门已经file了,希望下一版本能够解决
 
     


©2009 Baidu