Silverlight 与 WPF 的一些差异
首先,这两者使用的namespace是不同的,不要以为都是<Canvas />作为根元素那就是同一个类,其实从XML语义的角度来说不同namespace的同名节点代表着不同类别的实体。Silverlight的默认namespace是http://schemas.microsoft.com/client/2007,而WPF的默认namespace则是http://schemas.microsoft.com/winfx/2006/xaml/presentation。有趣的是,WPF是不兼容Silverlight文档的,也就是说一个具备Silverlight namespace的文档用WPF方式直接打开XAML的话就会立即抛出异常,然而反过来做则是可以的。如果在Silverlight调用的XAML中使用WPF或Silverlight以外的namespace,则会抛出异常,这说明了Silverlight不是没做namespace检查,而是刻意兼容WPF文档的。
其次,这种兼容并不意味着完全一致的呈现方式,其实两者对于同样的XAML在呈现上是会有略微差别的。我现在发现的一个细微差异是关于StrokeThickness的“溢出”效果的。首先说说Rectangle吧,假设一个长宽都是100的Rectangle,而它的StrokeThickness从0向50增长,那么你可以看到其边框的变化是从无到有,从最细到完全填充整个矩形,在这个过程中边框的延伸都是向矩形内部方向的,没有对外溢出。然而如果StrokeThickness超过50继续增长呢?这时候WPF与Silverlight的表现就有所不同了,WPF表现为与StrokeThickness等于50时一致,没有任何变化;Silverlight表现为矩形的长宽自动扩大为StrokeThickness的两倍,以确保相对的两条边框是不会互相重叠的,因此矩形不断向外“溢出”。注意“溢出”是以矩形的中点为变换(Transform)中点(Center Point)的,也就是说向上下左右四个方向等距离延伸。
我们再来看看Ellipse,同样先创建一个长轴和短轴都是100的Ellipse,然后开始增加StrokeThickness,直到超过50。Silverlight的表现和之前的Rectangle一样,那就是向外“溢出”,不过变换中点变成了左上角,扩展后的圆形向右下延伸了。WPF则更奇怪一些,同样的“溢出”问题,不过根据原来100*100的区域进行了类似Clip(剪裁)的效果。也就是说,如果StrokeThickness为200,那么这时候圆的直径为200,然而因为Ellipse的长宽都设置为100,因此就剪裁出左上角100*100的区域,你只能看到左上角的1/4圆。
看到Ellipse的效果后,我们可以反过来解释Rectangle的,其实WPF中的Rectangle不是不“溢出”,而是“溢出”后经过剪裁就和没有“溢出”一样。我们发现了的Silverlight与WPF差异,也就在于“溢出”后是否对区域进行剪裁。
这时候使用Expression Design做设计的朋友就要注意了,因为Expression Design导出的XAML无论选择WPF还是Silverlight,其namespace都是WPF的,虽然都能正常打开,但在Silverlight中看到的效果可能就与你想要的效果有所差别。
最后,有兴趣关注Silverlight的朋友,欢迎订阅我的blog:
- Cat in Chinese (feed)
- Cat in dotNET (feed)
转载于:https://www.cnblogs.com/cathsfz/archive/2007/11/19/964895.html
Silverlight 与 WPF 的一些差异相关推荐
- 分享Silverlight/Windows8/WPF/WP7/HTML5一周学习导读(5月6日-5月12日)
分享Silverlight/Windows8/WPF/WP7/HTML5一周学习导读(5月6日-5月12日) 本周Silverlight学习资源更新 Beginning Silverlight 4 i ...
- Silverlight/Windows8/WPF/WP7/HTML5周学习导读(6月25日-7月1日)
Silverlight/Windows8/WPF/WP7/HTML5周学习导读(6月25日-7月1日) 本周Silverlight学习资源更新 用Silverlight做淘宝应用 往事如锋 基于 Si ...
- silverlight,WPF动画终极攻略之白云飘,坐车去旅游篇(Blend 4开发)
原文:silverlight,WPF动画终极攻略之白云飘,坐车去旅游篇(Blend 4开发) 这章有点长,所以我分成了两章.这一章主要是准备工作,差不多算美工篇吧,这章基本不会介绍多少动画效果,主要讲 ...
- Silverlight 和WPF的Composite Guidance(Prism V2)发布了
Microsoft 模式和实施方案小组最近发布了第二个版本的"WPF 复合应用程序指南",这一新指南旨在充分利用 WPF/Silverlight 的功能和编程模型.同时,团队还根据 ...
- Silverlight/Windows8/WPF/WP7/HTML5周学习导读(9月24日-9月30日)
Silverlight/Windows8/WPF/WP7/HTML5周学习导读(9月24日-9月30日) 本周Silverlight学习资源更新 解决"Chrome提示:Silverligh ...
- silverlight,WPF动画终极攻略之番外 3D切换导航篇(Blend 4开发)
silverlight,WPF动画终极攻略之番外 3D切换导航篇(Blend 4开发) 原文:silverlight,WPF动画终极攻略之番外 3D切换导航篇(Blend 4开发) 这篇介绍的是3D导 ...
- Silverlight/Windows8/WPF/WP7/HTML5周学习导读(7月30日-8月5日)
Silverlight/Windows8/WPF/WP7/HTML5周学习导读(7月30日-8月5日) 本周Silverlight学习资源更新 Silverlight 之Control and Use ...
- Silverlight/Windows8/WPF/WP7/HTML5周学习导读(10月15日-10月21日)
Silverlight/Windows8/WPF/WP7/HTML5周学习导读(10月15日-10月21日) 本周Silverlight学习资源更新 Silverlight + DomainServi ...
- 在Silverlight 和WPF中使用预编译指令 if..else..endif (译)
下面的是中文翻译,有些扯淡的话就略过了,想看原文,请到这里 对于预编译指令,作者分成了几篇文章来讲解的.鉴于翻译后的文字较少,我把作者的几篇合为了一篇.下面进入正题. 一.总揽: 想要编写特定平台的代 ...
- Silverlight/Windows8/WPF/WP7/HTML5周学习导读(9月17日-9月23日)
Silverlight/Windows8/WPF/WP7/HTML5周学习导读(9月17日-9月23日) 本周Silverlight学习资源更新 Silverlight动画设计中对平移动画的一点体会 ...
最新文章
- 分布式缓存技术memcached学习(一)——linux环境下编译memcahed
- python自学用什么书好-适合python基础学习的好书籍
- 【收藏】严重影响IDEA启动速度的插件
- Java和WebSocket开发网页聊天室
- jQuery Mobile移动网站
- 程序清单3-1 测试能否对标准输入设置偏移量
- 数学之路-python计算实战(14)-机器视觉-图像增强(直方图均衡化)
- 深度装机大师一键重装_笔记本怎么重装系统?笔记本自己如何重装系统?
- 为什么新装的mysql5.7服务无法启动_Mysql5.7为什么无法启动?请大家帮忙
- C语言标准库中常见字符串处理函数
- android 下拉框大全,Android 下拉列表Spinner
- CentOS 5.2 LVM 新增加一块硬盘的方法
- authware课件
- lintcode java_Lintcode-java版本
- Delphi 导出Excel功能
- PHP 判断一个数是否是质数
- 3种结构ZnO基半导体纳米复合材料-图文详解
- Mono.Cecil
- STP配置 HSRP配置 端口追踪
- 零门槛人像转卡通、GIF表情包,这个项目不仅开源,还做成了小程序