当前位置: 首页 > 编程日记 > 正文

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

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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

image     image

引子

作为一个老牌WPF程序员,多年来一直关注的问题是,在微软发布最新的WinRT框架之后,接下来的客户端编程将何去何从。

显然我有充分的理由担心这个,众所周知的Silverlight的中途搁浅,它对下游的开发人员带来了很大的损害;俗话说:一朝被蛇咬,十年怕井绳。这就是真实写照。

我从2009年开始就对WPF投入很大的精力,使用它开发财务相关的行业软件,如今,我依然还在这里,但是焦点转向了培训相关工作。作为专业开发和培训讲师,WPF的将来对我来说至关重要,这也是我深入思考这个问题的根结。

本文我将本着客观和透明的方式给大家分享我所的发现和感悟,希望起到抛砖引玉的作用,以此为社区提供更好的有前景的WPF。
另外,在本文的结尾,我将为企业和个人开发提供一些策略和个人见解。

有理由担心

首先,我将展示那些我所担心的标志性信号,如果你是一个WPF的利益相关者,这也会是你所担心的。

WPF团队博客断更

如所有微软的技术团队一样,WPF团队也有自己的博客,主要话题集中在向社区分享团队内部成员在WPF上的各种经验。    
该博客的最后一篇文章发表于三年前,2011年五月,或者另一个精确的说法是当WinRT宣布开始并作为下一个重大目标的时候。    
一个断更的博客会暗示很多问题,恕我直言,从来没有好的方面的:或许这个团队被缩减到极小,以至于博客被挤出任务优先级列表了;也可能是最优秀的团队成员已经转到其他项目,比如WinRT;更甚者,或许这就是团队隐晦的给社区传递出来的信号……    
从公共关系角度来看,一个活跃的团队博客是很基本的点,因为它对外展示了技术发展和忠实的开发团队向社区主动表达工作的满意和分享的意愿。    
你或许已经注意到微软的MSDN博客其实并不活跃,为数不多的例外是EntityFramework团队博客,这应该归功于经常更新博文的Rowan Miller,而这恰恰就是我一直偏爱这项技术的一个主要理由:这是一个天才团队和有责任的团队开发出来的。

官方WPF Toolkit不再更新

WPF Toolkit是一个由微软团队开发的开源免费项目,目标是WPF的重要辅助套件和前哨。

image    
一个很典型的例子是DataGrid控件,在WPF的起初的发行(WPF3.0和WPF4.0)是没有的,但在Toolkit里面有,到后来,最终WPF4.0把它放到正式的发行里了。    
官方的Toolkit一直扮演这样的角色一直到2010年,但是自从项目开始清减之后,也就没有什么人关注所谓的下一版本的发布了。    
表现出不活跃的信号是:Google搜索引擎对关键字“WPF Toolkit”的排次把官方的toolkit放第二,而第三方的反倒占据第一(本文第二部分会有更细节的描述)

WPF不再进行认证考试

官方的WPF认证考试(70-511)已经不在延续,并将在2015年夏天终止。

image    
这给开发人员一个强烈的明确信号,就是不要在该项技术上投入了,相应的可以考虑投入时间和精力到WinRT上,这样才会从认证考试获得回报。    
或许将来某一天微软会推迟这个认证考试的吊销,正如他们曾经做过的,在收到大量社区开发者的诉求之后会有一定的妥协,但是都不可避免的是,WPF已经不在重要。    
就我个人而言,我一直很犹豫要不要过这项认证考试,因为我实在无法保证时间和物有所值(是的,我自己付费)。反而很坚定的认为可以准备WinRT的认证考试,因为它在将来的几年都会是有效。

不再提供Window 8+系统集成

回想WPF4.0发布,同时发布了很多的Window 7系统相关的集成和增强,比如任务栏定制(弹出列表,进度,遮罩等等……)。  
但是当WPF4.5到来时,却没有给Window 8+系统功能做完全的集成,比如则边栏(Charm Bar),大多数应用只能通过互操作来交互。    
因此,微软没有投资在这些集成工作上,这很明显的揭示WPF已经不再是Window系统的一等公民,实际上它首选投入WinRT的怀抱,个人认为这是一个合理的决策。

WPF不支持WinRT

微软,这个曾经的老牌软件供应商,如今业务多样化,开始成为一个硬件供应商,效仿它的竞争者苹果和三星。  
为此微软收购了诺基亚,以期获得移动市场的长期席位。

image    
在平板和笔记本这方面,为了和苹果的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今生未来(下):安心

转载于:https://my.oschina.net/powertoolsteam/blog/351763

相关文章:

C语言新手写扫雷攻略3

界面绘制好后,雷数也布置了,接下来就是游戏的运行过程了,今天先不说具体过程,再来看看需要用到的辅助函数 先是简单的画红旗,鼠标右键的功能是画红旗,至此我们都是在使用函数自己绘图,效率是低&…

制作欧比旺·克诺比逼真的CG角色学习教程

艺术站-制作欧比旺克诺比逼真的Cg角色 大小解压后:4.98G 含课程素材文件 1920X1080 .mp4 语言:英语中英文字幕(根据原英文字幕机译更准确) 课程获取:制作欧比旺克诺比逼真的CG角色学习教程 信息: 欧比旺是我一直以来…

Java学习总结:31(StringBuffer类)

StringBuffer类 在Java中String类不适合使用于频繁修改字符串的操作上(因为其字符串常量一旦声明则不可改变,只能改变字符串对象,改变的是其内存地址的指向),所以我们可以使用StringBuffer类方便用户进行内容的修改。 例:观察Str…

c语言常用数据类型转换整理

你要发送原始数据流 还是 格式化输出? 如果是格式化 按原子说的 ,用sprintf / printf; 如果发送原始内存数据流, 可按下面发送, 发送 #define BYTE0(pointer) (*((char*)(&pointer)0)); #define BYTE1(pointer) (*((char…

2022-2028年中国老年旅游市场深度调研及开发战略研究报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新(交付时间约3个工作日) 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国老年旅游行业市场行业相关概述、中国老年旅游行业市场行业运行环境、分析了中国老年旅游行…

Andriod使用webview控件往APP里内嵌网页

1.布局文件片段&#xff1a;res-layout <WebView android:id"id/Toweb" android:layout_width"fill_parent" android:layout_height"fill_parent" /> 2.Java片段&#xff1a;src Overrideprotected void onCreate(Bundle savedInstance…

垃圾回收器ZGC应用分析总结

ZGC 是一款低延迟、高吞吐的垃圾回收器,由 Oracle 公司开发。它适用于大型、多核、内存容量较大的应用程序。ZGC 的设计目标是在最大限度地减少停顿时间的同时,为大型内存提供可伸缩性,并为生产部署提供高吞吐量和稳定性。它的目标是以不到 10 毫秒的暂停时间来控制 100MB 到 4TB 的内存。此外,ZGC 还致力于避免全局 JVM 暂停,从而提高系统的可用性。简单来说,它的设计目标是在不超过 10 毫秒的暂停时间内,尽可能地回收大量的堆内存。低延迟:ZGC 的主要目标是最小化 GC 暂停时间。

14个Java并发容器,你用过几个?

不考虑多线程并发的情况下,容器类一般使用ArrayList、HashMap等线程不安全的类,效率更高。在并发场景下,常会用到ConcurrentHashMap、ArrayBlockingQueue等线程安全的容器类,虽然牺牲了一些效率,但却得到了安全。上面提到的线程安全容器都在java.util.concurrent包下,这个包下并发容器不少,今天全部翻出来鼓捣一下。仅做简单介绍,后续再分别深入探索。ConcurrentHashMap:并发版HashMap。

MySQL主从复制(基于binlog日志方式)

主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一般是准实时的业务数据库。主从复制的作用1.做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。2.架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。3.读写分离,使数据库能支撑更大的并发。a.从服务器可以执行查询工作(就是我们常说的读功能),降低主服务器压力;(主库写,从库读,降压)

RabbitMQ安装

windows上安装过程&#xff1a;https://blog.csdn.net/linsongbin1/article/details/80170567运行中给新建用户赋权限&#xff0c;如果界面创完用户忘给权限了可以用这个方法&#xff1a;https://blog.csdn.net/hello_world_php/article/details/83859767 备注&#xff1a;我的…

Complete C# Unity Game Developer 2D

你会学到什么 从头开始学习C#&#xff0c;一门强大的现代语言。没有编程经验是必要的。 在使用Unity游戏引擎方面变得优秀。 为游戏设计和游戏开发打下坚实的基础&#xff0c;这将有助于您构建自己的游戏。 了解面向对象编程在实践中如何工作。 创建可玩的游戏项目——对你的投…

玩转android自定义控件二——自定义索引栏listview

带索引栏的listview&#xff0c;在android开发非常普遍&#xff0c;方便用户进行字母索引&#xff0c;就像微信通讯录这样&#xff1a; 今天&#xff0c;我们就从零到一实现这个具有索引栏的listview. 怎么实现这个控件了&#xff0c;我们应当梳理出一个思路。 ①首先应当将字母…

172. 阶乘后的零

给定一个整数 n&#xff0c;返回 n! 结果尾数中零的数量。 示例 1: 输入: 3 输出: 0 解释: 3! 6, 尾数中没有零。示例 2: 输入: 5 输出: 1 解释: 5! 120, 尾数中有 1 个零.说明: 你算法的时间复杂度应为 O(log n) 。 话不多说&#xff0c;先上代码&#xff1a; class So…

Mysql函数group_concat、find_in_set 多值分隔字符字段进行数据库字段值翻译

Mysql函数group_concat、find_in_set进行数据库字段值翻译 场景 配方表&#xff1a;记录包含的原料 sources表示原料&#xff0c;字段值之间用逗号分隔 原料表&#xff1a;对应原料id和原料名称 现需要查询出的原料结果显示为原料名称&#xff0c;并以逗号分隔。可通过函数g…

网站速度优化-前端篇

2019独角兽企业重金招聘Python工程师标准>>> 页面中最好不要有js片段&#xff0c;合并多个js为一个js&#xff0c;并将js压缩 &#xff08;百度搜索&#xff0c;有在线js压缩、解压缩工具&#xff09;&#xff0c;并放在文档底部页面中最好不要有css片段&#xff0c…

HashMap总结

为什么用HashMap HashMap是一个Hash桶(数组链表)&#xff0c;桶存储的内容是键值对(Key-value)映射HashMap采用了数组和链表的数据结构&#xff0c;能在查询和修改方便继承了数组的线性查找和链表的寻址修改HashMap是非synchronized&#xff0c;所以HashMap很快(哈哈哈)与HashT…

Blender与Substance painter制作三维手枪

你会学到: Blender和Substance painter的基础知识 建模 纹理制作 烘焙 Uv展开 Boolens和斜角修改器 如何制作游戏准备枪 课程获取&#xff1a;Blender与Substance painter制作三维手枪 – 云桥网络-CG技术学习平台 要求 Blender Substance painter 你好&#xff0c;我是3d艺术…

Java学习总结:32(Runtime类)

Runtime类 该类用于表示虚拟机(JVM)运行时的状态&#xff0c;每次启动JVM都对应一个Runtime实例&#xff0c;且只有一个实例&#xff0c;利用Runtime类可以启动新的进程或进行相关运行时环境的操作。此外&#xff0c;该类采用单例模式设计&#xff0c;对象不可以直接实例化。所…

转:查看系统是64位还是32位

1、getconf LONG_BIT or getconf WORD_BIT 例如&#xff1a; 2、file /bin/ls 例如&#xff1a; 查看linux的版本: 转载于:https://www.cnblogs.com/lei-lei/p/5029120.html

Redis问题——Error: 磁盘在使用中,或被另一个进程锁定。

Redis出于对数据保护&#xff0c;默认只能本地客户端连接。远程连接就会出现以上错误。如何解决这一问题&#xff0c;看下&#xff1a; server -A&#xff0c;PC-A&#xff0c; 修改server-A的redis.conf:注释掉本地绑定&#xff1b; bind 127.0.0.1 表示指定绑定本机IP&…

[转]C#索引器

索引器是一种特殊的类成员&#xff0c;它能够让对象以类似数组的方式来存取&#xff0c;使程序看起来更为直观&#xff0c;更容易编写。 1、索引器的定义 C#中的类成员可以是任意类型&#xff0c;包括数组和集合。当一个类包含了数组和集合成员时&#xff0c;索引器将大大简化对…

从Java8到Java21各版本新特性详解

​ 下面这张图是 Oracle 官方给出的 Oracle JDK 支持的时间线,可以看出,JDK 17的支持时间最长,可以延续到2029年9月。考虑到技术更新的速度,这次免费商用8年的时间可谓是经过精心考虑,旨在让用户放心地升级到JDK 17(不过JDK 8的支持时间更长,到2030年12月)。​ 从JDK诞生到现在,仅有几个版本得到了长期支持,主要包括JDK 7、JDK 8、JDK 11以及即将发布的JDK 17,它将是继Java 8之后最重要的LTS版本,是Java社区八年努力的成果。

make[1]: g++: Command not found

今天装了nmap软件&#xff0c;开始报这种错&#xff1a;g -c -Iliblua -Ilibdnet-stripped/include -Ilibpcre -Ilibpcap -Inbase -Insock/include -fno-strict-aliasing -DHAVE_CONFIG_H -DNMAP_NAME\"Nmap\" -DNMAP_URL\"http://nmap.org\" -DNMAP_PL…

学习如何用平板电脑设计和绘制自己的动漫角色

创造你自己的动漫人物插图 学习如何用平板电脑设计和绘制自己的动漫角色 大家好&#xff0c;我是Pesa&#xff0c;一个想把快乐和希望融入到讲述故事的插画中的插画师。一点一点地&#xff0c;我画出我喜欢和希望的事物的场景&#xff0c;它把我带到了101班。 艺术世界 艺术是…

Java学习总结:33(System类)

System类 System类的方法 No.方法类型描述1public static void arraycopy(Object src&#xff0c;int srcPos&#xff0c;Object dest&#xff0c;int destPos&#xff0c;int length)普通数组粘贴操作2public static long currentTimeMillis()普通取得当前的日期时间&#x…

重磅推出:AutoProject Studio 自动化项目生成器

AutoProject Studio 自动化项目生成器 核心架构图 AutoProject Studio 自动化项目生成器是一款基于C#.Net Framework 4.0为平台自主研发、专为软件设计、开发、管理的自动化项目(代码)生成器&#xff0c;同时也是一个智能化软件开发平台与超高效率、超低成本的最优解决方案。 该…

2022-2028年中国基因工程药物产业市场研究及前瞻分析报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国基因工程药物行业市场行业相关概述、中国基因工程药物行业市场行业运行环境、分析了中国基…

Perl 模块安装遇到的问题解决办法

2019独角兽企业重金招聘Python工程师标准>>> 问题1&#xff1a;Warning (usually harmless): YAML not installed, will not store persistent state 解决办法&#xff1a; 官网下载&#xff1a;http://search.cpan.org/~mstrout/YAML-0.84/lib/YAML.pm 上传安装…

如何终止一个正在动态执行的命令

比如&#xff0c;我们在终端输入了top 那么它就会一直动态的运行下去。 我们怎样让它终止呢&#xff1f; 很简单&#xff0c;Ctrl C就可以了。 另外&#xff0c;还有一种方法&#xff0c; 直接按一下q也可以退出。 它们两个的效果是一样的。转载于:https://www.cnblogs.com/o8l…

绘制你的世界:探索构图和真实的深度感

MP4 |视频:h264&#xff0c;1920 x 1080 |音频:AAC&#xff0c;48 KHz&#xff0c;2 Ch 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09;| 2h 24m |大小解压后:3.2 GB 勾画你的世界不是关于天赋&#xff0c;而是关于任何人都可以学习的原则和…