同样是 .NET 平台,WPF 为什么不取代 WinForms?

个人感觉 WPF 的数据驱动控件,以及他的 logical tree 和 visual tree 简直让控件设计和事件、数据交流变得很灵活也很简便。为…
关注者
231
被浏览
492,738
登录后你可以
不限量看优质回答 私信答主深度交流 精彩内容一键收藏

五条理由:

对于够用党来说winform够用了

winform上手肯定比wpf简单

wpf刚出来的时候启动速度太慢,企业还是以winform为主(256M内存,XP时代)

然后桌面项目就没落了,wpf不跨平台不开源,wpf没有出手大型软件的机会,现在开源了也没跨平台。

wpf创建控件的速度还是比winform慢一点,有些情况下还是有winform比wpf快的感觉


但是在我所在的工控编程领域,我还是推wpf多,有很多方面,比如这个领域小动画很多,比如管子要有蚂蚁线动画,表达有东西在流动,十几个蚂蚁线就能让winform卡的10帧都不一定有。比如很需要line chart曲线图折线图,不断地更新,还需要平移缩放操作等,winform的渲染性能太差,承载能力低。而wpf的渲染性能足够好,导致渲染性能不是瓶颈,动画可以做到流畅的60帧,当然我们群里也有人不服说工控软件要这么流畅干嘛,我会把我使用一个性能非常好的chart示例视频给他看,让他们看看威力,这个优秀体验是软件实力的彰显,其实只是用了好用的控件。WPF也更擅长无损图形和3D,这样可以借svg,autocad和solidworks的东西做成自己需要的界面,无损平面转xaml的Shapes,sw中提取简单的3d图直接可以导出xaml,方便控制动画和颜色,做出更加好的效果动画,方便程度远超qt到web的各种。

winform也有控件使用sharpdx来渲染加速,但是如果各个控件都用sharpdx的话,他们用的版本通常都是不同的,那么就只有一个控件能用上sharpdx了。所以wpf的渲染速度底子还是很重要的,不要总是麻烦sharpdx嘛。

当然,wpf你入门以后会发现开发其实比winform简单好用,画一些工控需要的乱七八糟的东西也方便,所以wpf是肯定优于winform的。但是现在桌面客户端领域里要把软件做大的少。


放两个我们群主做的控件的演示

winform的蚂蚁线性能测试 https://www.zhihu.com/video/1199781515418333184

winform的蚂蚁线性能测试,这真的不是视频30帧的缘故,而是太卡了没必要用高帧率

wpf蚂蚁线性能 https://www.zhihu.com/video/1199781979723579392

wpf这个蚂蚁线的数量,真的不用说啥了,多少根都是60帧呀


--

群里还见识了个纯wpf加载各种格式的三维模型,做类似gis的东西的,不需要借助sharpdx这类库,效果不错还容易上手,wpf的潜力比winform大太多了,当然你也可以在winform下用sharpdx,但是那个难度远高于wpf的3d。

--

我发现网上搜索的svg转xaml都是转成geo数据的这种,这种不适合用来自己控制动画和局部颜色,我都是转成xaml shapes的

这里需要用 AB2D ReaderSvg + ViewerSvg,这个是商业的

我写了个简单的够我用了 SvgToXaml ,可以看下原理,很简单的

--

补充一下优点,xaml的易于复制性,wpf silverlight uwp xamarin.form maui之间的xaml很多事可以复制的,如果你用的自己做的同名控件库,最好是用telerik dev等这种多平台控件库,互相复制起来非常爽,有人居然用着winform然后拿uwp来怼wpf,wpf转那个废柴uwp也基本就复制复制,问题是也没人想转过去。。。 都等maui呢

--

补充一下没用过wpf的人经常说的问题,

1、拖控件,wpf也能拖控件,但是你体会过复制xaml的便利就不会想要拖控件了,winform如果工具箱乱套卡死就没法工作了,看个控件demo也没法把界面复制过来用,而wpf的demo边看边复制过来,比如应用商店下个telerik的wpf的demo,看到需要的用法直接整个xaml复制过来

2、性能 wpf也就比winform多占两三百兆内存,在现在这个时代这很多么?我的j1900带核显 + 4g内存跑的很溜啊,反过来论图形性能,wpf比winform速度快更便利,什么叫真正的图形性能,怎么也得来点大数据量下的动画吧,这个纯winform完全整不了,sharpdx又麻烦。

wpf需要显卡性能很强? 拜托,这也是经典谣言了,一个核显足够跑飞无数小动画了,显卡毕竟是显卡,在专业技能方面比cpu强太多了,所以不需要很强就能达到远超cpu能达到的,你想玩过于复杂的3d那当然像游戏一样需要提高显卡性能,这不代表普通程序需要很强的显卡。

3、wpf能有的winform也能有, 那我还说winform能有的,wpf当然也能有,为什么整天拿这用来说事儿,wpf的独有特点是winform没法模仿的

我不是说诋毁winform,如我最上面说的几条,winform对于传统管理类界面很够用,很成熟,确实会方便,但是他的潜力就是被局限,连winform的图形性能瓶颈都没遇到过用GDI还用的很欢的人,肯定不会懂这个的