游乐游手机版
首页/数据库/文章详情

WPF现状与未来发展策略解析:今生与前景探讨

时间:2026-08-20 20:08
本文承接上文《WPF老矣,尚能饭否——且说说WPF今生未来(上):担心》,继续探讨WPF的发展现状与未来走向。“上篇”中的部分精彩点评:虽然WPF本身已经不再频繁更新,但围绕WPF理念延伸出来的技术体系仍在持续演进,比如如今的WinRT,本质上只是换了一套API,xaml还是xaml,数据绑定依旧是

本文承接上文《WPF老矣,尚能饭否——且说说WPF今生未来(上):担心》,继续探讨WPF的发展现状与未来走向。

“上篇”中的部分精彩点评:

虽然WPF本身已经不再频繁更新,但围绕WPF理念延伸出来的技术体系仍在持续演进,比如如今的WinRT,本质上只是换了一套API,xaml还是xaml,数据绑定依旧是数据绑定,依赖属性仍然是依赖属性,模板机制也没有本质变化。其实学过WPF的人转向WinRT通常会比较顺手,Blend的使用方式变化也不大,只不过当前WinRT相关岗位的人才需求确实有些尴尬。
最后还是要感谢WPF,为我们带来了MVVM这种高效的开发方式和开发模型。 by @h82258652

虽然WinForm本身停止了功能更新,但是相关工具链其实一直在升级,比如VS设计器、C#语法、第三方控件以及开源组件等。
另外,WinForm基于Win32 API的设计本身已经非常成熟,从功能覆盖面来看也基本包罗万象,因此即便微软不继续更新,也未必会带来太大问题。 by @winkingzhang

技术总是在不断迭代和升级,有些人说厂商换个API只是为了赚钱,这种说法多少有些片面,也反映出不少人一换API就不会开发了。我倒觉得,平台更新归更新,开发者真正需要做的事情始终只有一件:写好代码,做好产品。.NET的开发思路其实一直都在那里,对吧。 by @笋干

微软的新策略

2014年2月,微软云服务部门负责人萨提亚·纳德拉被任命为新任CEO。
他接替了史蒂芬·鲍尔默,而鲍尔默此前对移动市场,尤其是iPhone和Android生态,缺乏足够敏锐的判断,这或许也是微软在与苹果、三星等竞争对手的市场竞争中失利的重要原因之一。


与前任不同,萨提亚·内德拉为微软确立了“云优先、移动优先”的整体战略,因此微软必须跳出传统桌面市场,这确实是顺理成章的发展方向。但更准确地说,WPF从设计之初就是基于一种相对“传统”的模型打造的,它是典型的富客户端桌面应用框架;而与之相对,WinRT采用了完全不同的设计模型,更加贴近现代移动平台和跨设备场景的需求。
当然,桌面应用和单机市场并没有消失,只是它们显然已经不再承担主导角色。

微软商店

为了从应用生态中获取一部分开发商收入,苹果、微软等平台厂商都建立了自己的“应用商店”,应用的发布、分发与购买基本都在其中完成。据我所知,很遗憾,微软商店中的应用通常必须基于WinRT开发,因此基于WPF开发的应用无法直接发布到微软商店。
需要注意的是,对于一些业务型软件来说,它们往往是内部部署和内部使用的;而像ERP系统这类大型软件厂商,也通常拥有自己的销售与分发渠道,所以这并不一定构成问题;但对于小型软件开发商或独立开发者来说,这就是一个现实障碍,因为你往往希望借助公开透明的应用市场,尽快在竞争对手之前占领市场。
如今,越来越多的用户在不知道去哪里获取新应用时,会本能地先去在线商店搜索。如果你开发的是WPF应用程序,那么在产品发布层面会遇到明显限制,更不用说后续的商业销售,因此,从市场渠道角度看,使用WinRT开发会更合适。

移动性

如果你每天都通过移动设备上的浏览器或本地App获取信息,那么你一定明白当前市场的主流趋势:你的应用需要具备移动版本。
而WPF从来就不是为移动开发准备的核心角色,甚至连配角都谈不上。前些年,面向Windows Phone定制的Silverlight曾一度登场,作为当时Windows Phone 7的主要开发工具。但一个平台对应一套独立开发框架显然不是理想方案,尽管它们之间可以共享部分流程和标记代码。
WinRT正是在这样的背景下诞生的,它是一套面向Windows 8及以上全系列平台设计的开发框架,从系统层面强调一致性,目标是提供更易上手的统一开发工具集。也正因如此,一些第三方控件厂商也开始支持WinRT,例如:ComponentOne Studio for WinRT XAML。

维护成本

如果你这些年一直在微软技术平台上工作,那么你大概会知道,微软在资源投入和成本控制方面向来十分谨慎。原因其实也很简单:首先,作为一家商业公司,微软必须盈利,而且还要达到甚至超过股东预期,所以自然会倾向于控制开支;其次,很多看起来只是“小改动”的功能,背后往往需要投入大量研发、测试和兼容性验证工作。Eric Lippert曾在博客中对此做过非常形象的说明:How many Microsoft employees does it take to change a lightbulb?
因此,当社区提出修复某个bug或增加某项新功能时,通常只有在它符合下面两类情况时,微软才更可能采纳:
- 重大问题,例如安全漏洞,即便只有少量用户会遇到
- 改动不大,但有大量用户持续抱怨
如果同时维护WPF和WinRT,就意味着要并行处理两套功能需求、两套缺陷修复和两套生态支持,这显然并不经济,尤其是在微软持续压缩成本的前提下更是如此。

可移植性

想一想,究竟是什么特质能让WPF长期“活下来”呢?例如,作为一种具备可移植能力的客户端开发技术?但很遗憾,它并不具备这一优势。
事实上,已经存在一个可移植版本的.NET(这里指更学院派意义上的、包含CLI的实现),那就是Mono。它不仅可以运行在Windows上,也能够运行于Linux、Unix和Mac平台。[注:本文未提到微软.NET开源、可移植的最新消息]
另外,Mono并不是一个“玩具级”技术,它是真正可用于生产环境的。就我个人而言,我已经在Ubuntu服务器以及Jenkins集成服务中使用它来构建应用。
Mono支持.NET框架中的大部分技术,但唯独没有真正支持WPF;如果我没记错,过去曾有一个名为“Olive”的项目尝试过相关工作,但最终并没有真正推进下去,因为整体工作量实在太大,尤其是底层渲染层的实现难度非常高。
Mono目前支持的唯一界面技术是WinForm,颇具讽刺意味的是,也正因为具备一定可移植性,WinForm反而比WPF拥有更强的生命力。

Silverlight综合征

作为一名Silverlight开发者,我对技术生命周期的短暂有着非常深刻的体会。回到2008/2009年,富互联网应用(RIA)正处于高速发展阶段,微软顺势推出了自己的框架Silverlight,并在随后的一系列微软活动中大力推广,希望各类企业和业务负责人能够在其IT体系中采用这一方案。接着在2010年直到2011年第一季度,我们都还在持续投入Silverlight应用开发。
然而,在之后的一次技术会议上,微软却宣布不再重点推进Silverlight,转而大力拥抱HTML5生态体系(包括CSS和Ja vaScript)。尽管官方一再表示Silverlight的定位并未改变,但我对此始终持怀疑态度,也曾对这件事进行过相关报道。随后,我所在的团队决定停止Silverlight项目开发,把精力重新集中到更“传统”的WPF开发上,因为这样做在当时反而还有一些实际优势(例如,Silverlight并不是“开箱即用”的,还需要管理员权限安装Silverlight运行环境)。


值得庆幸的是,大部分XAML和C#代码(大约85%)都可以与WPF共享,因此整体迁移损失并不算大,我们几乎没有经过太多犹豫就停止了相关投入。
事实证明,这最终是一个正确决定,因为到了2013年,微软官方宣布Silverlight终止,许多IT从业人员都感到非常震惊,因为他们此前几乎没有收到明确预警。
我并不认为类似的事情会以同样粗暴的方式再次发生在WPF身上,但在当下的IT环境和技术语境中,你难免会感到失望、变得更加谨慎,甚至对平台路线产生深深的不信任。

[未完待续]

鉴于在《WPF老矣,尚能饭否——且说说WPF今生未来(上):担心 》一文评论区中网友们的反馈,特别补充声明如下:

葡萄城在最近1月发布的Spread Studio 8、ComponentOne 2014V3以及ActiveReports 9,依然持续为WPF、WinRT、SilverLight提供产品升级与技术支持。

完整系列文章:

  • WPF老矣,尚能饭否——且说说WPF今生未来(上):担心

  • WPF老矣,尚能饭否——且说说WPF今生未来(中):策略

  • WPF老矣,尚能饭否——且说说WPF今生未来(下):安心

来源:https://apiv1.oschina.net/oschinapi/blog/detail?id=354079
上一篇Redis淘汰机制结合Pub/Sub实现LRU本地缓存同步方案 下一篇Mac版Navicat快捷键与系统冲突的解决方法
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
Redis是什么:核心特性、架构与应用场景解析
数据库 · 2026-09-01

Redis是什么:核心特性、架构与应用场景解析

Redis是一款基于内存的键值型NoSQL数据库,以超高读写速度和丰富的数据结构著称。本文系统梳理Redis的核心特性、架构组成、性能优势及典型应用场景,并通过与Memcached、MySQL、MongoDB的对比,帮助开发者快速判断Redis是否适合当前业务需求。

Windows 安装 MongoDB 完整图文教程
数据库 · 2026-09-01

Windows 安装 MongoDB 完整图文教程

本文详细介绍在 Windows 系统上安装 MongoDB 的完整流程。从官网下载 MSI 安装包开始,逐步演示自定义安装路径、配置 Windows 服务、跳过 MongoDB Compass 等关键选项,并提供通过系统服务列表验证安装是否成功的方法,帮助开发者快速搭建本地 MongoDB 环境。

Linux 安装 MongoDB 完整指南:依赖配置、环境变量与服务启动
数据库 · 2026-09-01

Linux 安装 MongoDB 完整指南:依赖配置、环境变量与服务启动

本文详解在 Linux 系统下安装 MongoDB 的完整流程,涵盖依赖包安装、二进制包下载解压、环境变量配置、数据与日志目录创建及服务启动验证。通过标准化命令与路径说明,帮助开发者快速完成部署并确认服务状态。

MacOS安装MongoDB完整教程
数据库 · 2026-09-01

MacOS安装MongoDB完整教程

本文介绍在MacOS系统下安装MongoDB的完整流程,涵盖下载、解压、目录配置、环境变量设置及服务启动。通过明确的命令与参数说明,帮助开发者快速完成环境搭建并验证安装结果。

Ubuntu系统安装与配置Redis完整指南
数据库 · 2026-09-01

Ubuntu系统安装与配置Redis完整指南

本文详解在Ubuntu系统中安装Redis的两种主流方式:apt在线安装与源码编译安装。涵盖版本选择逻辑、服务启停与状态检查、连接验证方法,以及在线练习工具与桌面GUI客户端的对比与使用建议,帮助开发者快速搭建并验证Redis运行环境。