[转]Windows8的WPF技术与HTML5的比较

摘要:
Windows8 8风格的程序支持WPF和HTML编程。我以前使用WPF开发概念QQ,现在使用HTML5。我对这两种技术都有一点了解。所以我对它们进行了比较。虽然WPF命运多舛,没有得到广泛应用,但该技术本身有许多亮点。它值得我们学习和拓宽视野。严格来说,WPF和Silverlight都属于Net技术系统下的新一代接口技术使用标记语言XAML来构建接口,程序语言可以选择C#等
Windows8风格程序支持使用WPF和HTML两种方式进行编程。本人之前曾使用WPF开发过概念版QQ,现在又在使用HTML5。两种技术都略懂,略懂。所以将两者做了个比较。虽然WPF的命运多舛,应用不太广泛,但技术本身还是有很多亮点的。值得我们学习一下,开阔眼界。
 
严格说WPF与Silverlight都属于.Net技术体系下新一代的界面技术,都使用标记语言XAML搭建界面,程序语可以选择C#等.Net体系的语言。
 
本文为了方面将WPF与Silverlight统一称作WPF,用XAML专门表示标记语言。用HTML5表示技术、HTML表示语言。
 
 

1. XAML与HTML

     都是标记语言,客户端在运行时进行渲染。
 
     XAML的程序虽然需要编译,但是XAML的处理是从文本格式转换为二进制格式,节省空间。
     HTML一般在服务器端进行压缩,如GZIP,在浏览器解压缩。目的也是节省空间。
 

2. 页面布局

     XAML提供的布局类型较多,有Table布局,有横向或纵向的堆栈式,wrap的流式布局,绝对位,还有windows特有的dock和anchor。
 
     HTML5中,大量用Div,布局方式有绝对的,float的,inline,chrome等浏览器对DIV的display方式进行了扩展,可以实现横向或纵向的顺序排列。Table方式就不用说了。HTML5中的多列方式是独有的。
 
     两者都可以在运行时动态修改界面元素。WPF还有原生的控件模版和数据绑定模版Template,但是HTML5的innerHTML更灵活更方便。
 
 

3. 渲染逻辑

     两者类似,都有逻辑树、视觉树(显示树)的概念。同样也有reflow和redraw的概念。同样reflow也是最耗资源的。
 

4. 图形绘制

     位图方面两者都支持很多图片格式。不过浏览器可以天然支持GIF,WPF不行,但可以自行实现。微软好像一直和GIF有仇。
 
     矢量图方面,WPF支持的形状种类更丰富。不过HTML5可以利用DIV的boader、圆角的设置实现很多基本图形。两者都支持Path。都支持Canvas.
 
     渐变色,两者都支持,不过WPF一开始就很完善看,HTML5在逐渐完善,毕竟浏览器不是一家的。
 

5. 样式

     HTML5的style,CCS3什么的到家都很熟悉了。不多说了。
     WPF中也有style,style可以有内建、外链和元素内的,外链的方式引用一个资源文件和CSS类似。不过CSS的选择器做得比较好,可以通过id、class、元素类型、伪类、还有各种组合方式。毕竟HTML用的人更多,CSS有机会发展的更完善。
     WPF中对于资源可以实现完全的编程控制,HTML5中可以用变成控制内联的CSS,外联的就不行了。
 

6. 事件

     元素的事件都支持事件前的捕获与事件后的冒泡。
     都可以自定义事件。两者没有太大差别。
 
     WPF有一个特有的机制叫触发器trigger。trigger与CSS3的hover伪类有些类似,但功能要多得多。trigger的实现是基于事件模式的,只不过是将常用的场景进行了包装,从而达到了不用写C#代码就可以处理简单事件逻辑的功能。
 
 

7. 数据绑定

     WPF所独有的。与触发器配合,可以打打减少编码量,很多功能不需要用C#,只需要XAML就可以实现。
 
 

8. 3D支持

     WPF可以支持3D。HTML5标准中支持,但是目前支持的还不完善处于实验状态。WPF中操作3D的编程界面比较友好,有高级API。WebGL提供的是底层API,难度较高,不过也有很多JS类库进行了封装。
 
 

9. Transform

     WPF只支持2D的translate,rotate,skew,scale。HTML5可以支持3D的rotate和translate。但正如第八点提到的,WPF有专门的3DAPI,操作也不复杂。
 

10. 编程语言

     WPF支持C#、C++、VB等多种.Net语言。HTML5支持JavaScript。个人感觉.Net的功能更强大,毕竟是客户端,几乎无所不能。但是脚本语言更灵活,可以在运行动态添加修改代码。
 

11. 数据

     WPF中可以将数据作作为资源以文本形式放在XAML内。
     最新的Chromium也支持DataList了。http://blog.chromium.org/2012/11/a-web-developers-guide-to-latest-chrome.html
 

12. 多媒体

     视频、声音理论上两者都支持。WPF支持更好,毕竟是客户端可以支持自己编写视频解码。HTML5这方面比较慢。视频方面由于H264的专利问题几大浏览器互相博弈。声音方面更是缓慢,没有一种音频格式能够通吃所有浏览器,在声音播放时还有诸多问题。不过前景是光明的,只是时间问题。
 
 

13. WPF中的特色

     依赖对象(DependcyObject )一套非常强大、霸气的面向对象模型。初期接触会觉得很晕,用熟了非常方便、非常爽。
 
 

14. HTML5的特色

     MathML算是一个特色。
 

15. 其他

     地理信息呀、WebWorker呀、WebSockets呀什么的可比较性不强。这里就不说。
 
 
 
                                           --------转自alloyteam

免责声明:文章转载自《[转]Windows8的WPF技术与HTML5的比较》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Gerritreact 使用 eslint 的三种代码检查方案总结,多了解点--让代码更完美....下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

实时监听输入框值变化:oninput & onpropertychange

结合 HTML5 标准事件 oninput 和 IE 专属事件 onpropertychange 事件来监听输入框值变化。 oninput 是 HTML5 的标准事件,对于检测 textarea, input:text, input:password 和 input:search 这几个元素通过用户界面发生的内容变化非常有用,在内容修改后立即被触发 使用 ...

wpf数据绑定更新通知

类似于这样子的;大致的意思是:一个代码变量,通过改变变量的值,绑定这个变量的这个圆颜色也在变化 就是一种心跳效果 在网上数据触发的感觉不多,废了不少时间,这里做个总结 1:通知 class NotifyBase : INotifyPropertyChanged { public event PropertyChangedEve...

一个简单的WPF MVVM实例【转载】

引用地址:http://blog.csdn.net/yl2isoft/article/details/20838149 1新建WPF应用程序WPFMVVMExample 程序结构如下图所示。 2Model实现 在Model文件夹下新建业务类StudentModel(类文件StudentModel.cs),类的详细代码如下所示。 [csharp]vie...

WPF 2D绘图(3)PathGeometry

PathGeometry可以创建任意的2D图形形状。 其内部通过PathSegment集合来实现 如画2个三角形 <Path Stroke="Black" StrokeThickness="1"> <Path.Data> <PathGeometry>...

WPF 中动态创建和删除控件

动态创建控件 1.容器控件.RegisterName("Name",要注册的控件) //注册控件 2.容器控件.FindName("Name") as 控件类型 //找到控件并转换成相应类型 注意:仅通过 控件.Name来设置是不能通过FindName来找到控件的,必须注册 动态删除控件1.容器控件.Children.Remove(控件) //移除控件 2...

WPF:设置弹出子菜单的是否可用状态及效果

需求: 设置弹出子菜单(二级)项仅首项可用,其他项均不可用;不可用是呈灰色效果。           注:             菜单项都是依据层级数据模板。具体格式如下:                  StackBlock{TextBlock{Image}、TextBlock}} 问题:          1、窗体加载后,获取不到二级子菜单控件(二...