zoukankan      html  css  js  c++  java
  • (转载)WPF与WinForm的抉择

    微软曾经对WPF(代号Avalon)抱很大的期望——新一代的华丽用户界面平台,一统Web应用和桌面应用,Flash杀手,尽管微软口头上不承认。几年下来,WPF确实实现了当初的预期的大部分功能,但离称霸软件开发领域还有不小的距离。不过,刚转到WinForm上一两年的开发人员们都很困惑,WinForm究竟还有没有未来。微软只是模糊地说短期内还是WinForm,长期是WPF。想想“维纳斯”,“TabletPC”,“Hailstorm”,“IE Channels”等等就知道这位老大的话不能全信。到底何去何从就仁者见仁智者见智了。

    英文开发社区内有句流行的话,叫“No silver bullet”,就是说没有万能 ,没有一个工具或方法能完美地解决所有的问题。同样这对WPF也适用。与其说WPF是WinForm的替代品,它更像DHTML和ASP.NET。夸张一点说,如果要给微软的技术画个家谱的话,DHTML就是WPF的直系亲属。WPF里的大量核心概念和结构,如属性引擎、事件模型等,都是继承自DHTML,最大的一个不同是外观和控件逻辑的分离。WPF应用和DHTML应用(HTA)的相似性也非常大,不同点是WPF应用可以完全脱离IE。也就是说,WPF和网页、ASP.NET、SVG是一套体系,可以比作XML版的Flash,而和WinForm完全不同。WPF的长项应该是网页式应用,当然它也可以用来做别的东西,就像Ajax可以做在线文本编辑器一样。

    也许有人还没听说过DHTML。DHTML即Dynamic HTML,是微软在90年代末在IE4里支持的扩展了的HTML,主要特征就是可以动态修改网页上对象的属性,而且具有类似Flash里的时间线,可以做动态的网页。缺点是难于开发和调试。后来主要被用来做翻转按钮。DHTML的一个页面集合和脚本资源一起可以打包成HTA应用,HTA应用可以在本机以及网络上使用。但从现在还有多少人记得DHTML就知道这东西没成才。

    回到WPF,WPF只在XP和Vista上有完整的支持,在其他平台和浏览器下,微软提供了WPF/E(开发代号)。WPF/E的程序是非编译的,就是说是发布源码的,和HTML加JavaScript一样。另外WPF/E目前只支持JavaScript。那么,WPF/E能用来做什么应用大家也就心里明白了。要在WPF/E和Flash间选择的话,只要想想XML和压缩的二进制文件的区别就行了,现在几兆的Flash比比皆是,改用XML格式的话会有多大,诸位心里明白。不过要是个网页Form应用的话,WPF/E确实比Flash更强一些,不过有Ajax在,杀鸡未必要用牛刀。如果你的应用只支持XP和Vista,那么你可以得到WPF的全部优势。

    WPF有三种应用模式:应用、浏览应用、文档应用。应用就是一般的窗口应用,浏览应用就是象网页一样的一页一页的应用,文档应用是用来显示内容的浏览应用功能子集,而不是MVC模型。一般应用其实也就是每个页面拥有一个独立的窗口。估计VB用户想到了当年的html控件,Delphi用户想到了IntraWeb。简单的理解就是把WinForm界面换成了网页,当然这个网页的功能比HTML强得多,也复杂得多。

    WPF是一套很复杂的体系,它的界面可以用代码生成,不过绝大多数人都会用XAML来生成。XAML可以认为是WPF的HTML。制定标准的人总是说XML是可读的,但多数人认为它是用来给机器读的。XMAL基于XML,同时做了相当的扩展以弥补功能的不足。要手写XAML,必须了解WPF,了解XML(namespace,link等等),了解XAML的规则,了解XAML扩展的语法,能够记住大量的标识符和引用关系。就像今天人们大多不再手写HTML一样,人们大多不会愿意去手写更复杂的XAML。而且按照微软的设计目标,WPF要将界面设计和程序逻辑分开,交给不同的专业人员去做。也就是说,界面的设计是要交给美工的。相信我,找一个能够手写XAML的美工很难。微软为此提供了Expression系列软件,当然不是免费的。当然VisualStudio里也有一定程度的支持,但这意味着由程序员来做灵活复杂的界面,更容易做出丑陋的界面;或者让美工来用VisualStudio,功能有限而且有点昂贵。当然也可能有个不错的UI程序员,两全其美;或者老老实实地做简单朴素的界面,以后有机会再找美工润色。

    程序员都喜欢谈论速度。WPF是可以硬件加速的,在DirectX 9级显卡和安装了较新的驱动的情况下,WPF会得到部分或完全的硬件加速。WinForm是基于GDI+的,没有硬件加速,只有v2.0里的非兼容模式下的文本是通过GDI加速的。所以,长远来说,WPF有更好的性能。

    那么现在回到最初的问题,WPF和WinForm,赌注该压哪一边。编辑器类程序是难以移植到WPF的,如World、Excel、PowerPoint、Photoshop、IDE等。显示类和一般的商务类应用都是可以移植的,现有的Web应用都是可移植的。也就是说,WPF的应用范围和Ajax、Flash是有很大重合的,WPF的竞争力就是在和代码的集成上。随着Adobe加紧升级Flash的应用功能,一种可能的结果是WPF和Flash压缩了Ajax的生存空间,WPF/E没有获得足够的支持,WPF成为Windows专用的应用,Flash作为跨平台方案存在。而对WinForm程序来讲,嵌入一些WPF内容是容易的。在WPF前途未卜的情况下,WinForm仍然是目前一般应用最稳妥的途径。

  • 相关阅读:
    vue自定义指令
    ZOJ Problem Set–2104 Let the Balloon Rise
    ZOJ Problem Set 3202 Secondprice Auction
    ZOJ Problem Set–1879 Jolly Jumpers
    ZOJ Problem Set–2405 Specialized FourDigit Numbers
    ZOJ Problem Set–1874 Primary Arithmetic
    ZOJ Problem Set–1970 All in All
    ZOJ Problem Set–1828 Fibonacci Numbers
    要怎么样调整状态呢
    ZOJ Problem Set–1951 Goldbach's Conjecture
  • 原文地址:https://www.cnblogs.com/binarytree/p/1325461.html
Copyright © 2011-2022 走看看