“WPF老矣,尚能饭否”—且说说WPF今生未来(上):担心
近日微软公布了最新的WPF路线图,一片热议;对于老牌控件提供商葡萄城来说,这是WPF系列控件一个重要的机遇,因此,Spread Studio for WPF产品做了一次重要更新,并随着Spread Studio 8.0发布。鉴于此,选择翻译并整理了一篇自codeproject的文章:《Is WPF dead: the present and future of WPF》,抛砖引玉,且聊聊程序员心目中的WPF。

引子
作为一个老牌WPF程序员,多年来一直关注的问题是,在微软发布最新的WinRT框架之后,接下来的客户端编程将何去何从。
显然我有充分的理由担心这个,众所周知的Silverlight的中途搁浅,它对下游的开发人员带来了很大的损害;俗话说:一朝被蛇咬,十年怕井绳。这就是真实写照。
我从2009年开始就对WPF投入很大的精力,使用它开发财务相关的行业软件,如今,我依然还在这里,但是焦点转向了培训相关工作。作为专业开发和培训讲师,WPF的将来对我来说至关重要,这也是我深入思考这个问题的根结。
本文我将本着客观和透明的方式给大家分享我所的发现和感悟,希望起到抛砖引玉的作用,以此为社区提供更好的有前景的WPF。
另外,在本文的结尾,我将为企业和个人开发提供一些策略和个人见解。
有理由担心
首先,我将展示那些我所担心的标志性信号,如果你是一个WPF的利益相关者,这也会是你所担心的。
WPF团队博客断更
如所有微软的技术团队一样,WPF团队也有自己的博客,主要话题集中在向社区分享团队内部成员在WPF上的各种经验。
该博客的最后一篇文章发表于三年前,2011年五月,或者另一个精确的说法是当WinRT宣布开始并作为下一个重大目标的时候。
一个断更的博客会暗示很多问题,恕我直言,从来没有好的方面的:或许这个团队被缩减到极小,以至于博客被挤出任务优先级列表了;也可能是最优秀的团队成员已经转到其他项目,比如WinRT;更甚者,或许这就是团队隐晦的给社区传递出来的信号……
从公共关系角度来看,一个活跃的团队博客是很基本的点,因为它对外展示了技术发展和忠实的开发团队向社区主动表达工作的满意和分享的意愿。
你或许已经注意到微软的MSDN博客其实并不活跃,为数不多的例外是EntityFramework团队博客,这应该归功于经常更新博文的Rowan Miller,而这恰恰就是我一直偏爱这项技术的一个主要理由:这是一个天才团队和有责任的团队开发出来的。
官方WPF Toolkit不再更新
WPF Toolkit是一个由微软团队开发的开源免费项目,目标是WPF的重要辅助套件和前哨。
一个很典型的例子是DataGrid控件,在WPF的起初的发行(WPF3.0和WPF4.0)是没有的,但在Toolkit里面有,到后来,最终WPF4.0把它放到正式的发行里了。
官方的Toolkit一直扮演这样的角色一直到2010年,但是自从项目开始清减之后,也就没有什么人关注所谓的下一版本的发布了。
表现出不活跃的信号是:Google搜索引擎对关键字“WPF Toolkit”的排次把官方的toolkit放第二,而第三方的反倒占据第一(本文第二部分会有更细节的描述)
WPF不再进行认证考试
官方的WPF认证考试(70-511)已经不在延续,并将在2015年夏天终止。
这给开发人员一个强烈的明确信号,就是不要在该项技术上投入了,相应的可以考虑投入时间和精力到WinRT上,这样才会从认证考试获得回报。
或许将来某一天微软会推迟这个认证考试的吊销,正如他们曾经做过的,在收到大量社区开发者的诉求之后会有一定的妥协,但是都不可避免的是,WPF已经不在重要。
就我个人而言,我一直很犹豫要不要过这项认证考试,因为我实在无法保证时间和物有所值(是的,我自己付费)。反而很坚定的认为可以准备WinRT的认证考试,因为它在将来的几年都会是有效。
不再提供Window 8+系统集成
回想WPF4.0发布,同时发布了很多的Window 7系统相关的集成和增强,比如任务栏定制(弹出列表,进度,遮罩等等……)。
但是当WPF4.5到来时,却没有给Window 8+系统功能做完全的集成,比如则边栏(Charm Bar),大多数应用只能通过互操作来交互。
因此,微软没有投资在这些集成工作上,这很明显的揭示WPF已经不再是Window系统的一等公民,实际上它首选投入WinRT的怀抱,个人认为这是一个合理的决策。
WPF不支持WinRT
微软,这个曾经的老牌软件供应商,如今业务多样化,开始成为一个硬件供应商,效仿它的竞争者苹果和三星。
为此微软收购了诺基亚,以期获得移动市场的长期席位。
在平板和笔记本这方面,为了和苹果的iPad平板和MacBook Pro笔记本相竞争,微软推出了Surface系列。
Surface 一代和二代根据硬件架构(x86和ARM)分成两种版本,而后者对应有了自己的专有系统:Windows RT(不要和作为软件层的WinRT混淆);但是Windows RT不支持(至少官方不支持)老的应用接口,比如优秀的老式Win32接口,因此也不支持在此基础上“包装”出来的衍生技术,像WinForm等等,当然包括WPF,因此无法在Surface版本上运行WPF应用程序。
微软不在此投入理由很简单,就是它想在最新的IT趋势中去除Win32,让量身定做的WinRT代替。
完整系列文章:
“WPF老矣,尚能饭否”—且说说WPF今生未来(上):担心的更多相关文章
- WPF老矣,尚能饭否——且说说WPF今生未来(中):策略
本文接上文<WPF老矣,尚能饭否——且说说WPF今生未来(上):担心>继续. “上篇”中部分精彩的点评: 虽然WPF不再更新了,但是基于WPF的技术还是在发展着,就比如现在的WinRT,只 ...
- WPF老矣,尚能饭否——且说说WPF今生未来(下):安心
在前面的上.中篇中,我们已经可以看到园子里朋友的点评“后山见! WPF就比winform好! 激情对决”.看到大家热情洋溢的点评,做技术的我也很受感动.老实说,如何在本文收笔--WPF系列文章,我很紧 ...
- WPF入门教程系列十五——WPF中的数据绑定(一)
使用Windows Presentation Foundation (WPF) 可以很方便的设计出强大的用户界面,同时 WPF提供了数据绑定功能.WPF的数据绑定跟Winform与ASP.NET中的数 ...
- WPF自学入门(五)WPF依赖属性
在.NET中有事件也有属性,WPF中加入了路由事件,也加入了依赖属性.最近在写项目时还不知道WPF依赖属性是干什么用的,在使用依赖项属性的时候我都以为是在用.NET中的属性,但是确实上不是的,通过阅读 ...
- wpf 研究之道 winform or wpf,u choose who?
很久以前,我们用winform做过一个五子棋的程序,当时用winform的画图,先画出棋盘...后来项目的研究阶段,偶尔用winform做个小工具.闲暇之余,看到介绍wpf的资料,只知道它采用了xam ...
- WPF自学入门(十一)WPF MVVM模式Command命令
在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式.正如上一篇文章中在开始说的,MVVM的目的是为了最大限度地降低了 ...
- 在Office应用中打开WPF窗体并且让子窗体显示在Office应用上
在.NET主程序中,我们可以通过创建 ExcelApplication 对象来打开一个Excel应用程序,如果我们想在Excle里面再打开WPF窗口,问题就不那么简单了. 我们可以简单的实例化一个WP ...
- 通过解读 WPF 触摸源码,分析 WPF 插拔设备触摸失效的问题(问题篇)
在 .NET Framework 4.7 以前,WPF 程序的触摸处理是基于操作系统组件但又自成一套的,这其实也为其各种各样的触摸失效问题埋下了伏笔.再加上它出现得比较早,触摸失效问题也变得更加难以解 ...
- 【WPF】创建基于模板的WPF控件(经典)
原文:[WPF]创建基于模板的WPF控件(经典) WPF可以创建两种控件,它们的名字也很容易让人混淆:用户控件(User Control)和定制控件(Customer Control),之所以如此命名 ...
随机推荐
- JQuery中的dialog使用介绍
初始化参数 对于 dialog 来说,首先需要进行初始化,在调用 dialog 函数的时候,如果没有传递参数,或者传递了一个对象,那么就表示在初始化一个对话框. 没有参数,表示按照默认的设置初始化对话 ...
- ApexSQLLog可以只读取ldf文件
ApexSQLLog可以只读取ldf文件 需要数据库在线 本文版权归作者所有,未经作者同意不得转载.
- Python黑帽编程2.5 函数
Python黑帽编程2.5 函数 写了几节的基础知识,真心感觉有点力不从心.这块的内容说实话,看文档是最好的方式,本人的写作水平,真的是找不出更好的写法,头疼.简单带过和没写一样,写详细了和本系列教程 ...
- ASP.Net MVC开发基础学习笔记:二、HtmlHelper与扩展方法
一.一个功能强大的页面开发辅助类—HtmlHelper初步了解 1.1 有失必有得 在ASP.Net MVC中微软并没有提供类似服务器端控件那种开发方式,毕竟微软的MVC就是传统的请求处理响应的回归. ...
- MySQL 存储过程
MySQL 存储过程 存储过程是通过给定的语法格式编写自定义的数据库API,类似于给数据库编写可执行函数. 简介 存储过程是一组为了完成特定功能的SQL语句集合,是经过编译后存储在数据库中. 存储过程 ...
- Nodejs学习笔记(二)--- 事件模块
目录 简介及资料 事件常用函数及使用 emitter.on(event, listener) emitter.emit(event, [arg1], [arg2], [...]) emitter.on ...
- Spring学习记录(三)---bean自动装配autowire
Spring IoC容器可以自动装配(autowire)相互协作bean之间的关联关系,少写几个ref autowire: no ---默认情况,不自动装配,通过ref手动引用 byName---根据 ...
- android 手把手教您自定义ViewGroup(一)
1.概述 在写代码之前,我必须得问几个问题: 1.ViewGroup的职责是啥? ViewGroup相当于一个放置View的容器,并且我们在写布局xml的时候,会告诉容器(凡是以layout为开头的属 ...
- Struts框架
Struts是最早的Java开源框架之一,它是MVC设计模式的一个优秀实现. Struts定义了通用的Controller(控制器),通过配置文件(通常是 Struts -config.xml) Ec ...
- [CentOs7]搭建ftp服务器(3)——上传,下载,删除,重命名,新建文件夹
摘要 上篇文章介绍了如何为ftp添加虚拟用户,本篇将继续实践如何上传,下载文件. 上传 使用xftp客户端上传文件,如图所示 此时上传状态报错,查看详情 从错误看出是应为无法创建文件造成的.那么我们就 ...