我玩了将近10年的WinForm,最近两年开始使用WPF,玩到最后我发现回不去了,下面我总结一下WinForm和WPF的优缺点,对于想搞桌面开发的,尤其是上位机开发的小朋友,你们可以借此参考下。
![]()
WinForm的优势很明显,那就是几乎不需要什么基础,界面按钮即拖即用,所见即所得。这种模式对于一个毫无编程基础的人来说,学习难度相对来说就很低了。
然后,根据自己的需求,稍微再学点基础语法,基本上搞个小软件也就不在话下了。
想往更高级点的方向去发展,基本上搞懂了GDI+,WinForm就可以玩的很溜了!
WPF相对于WinForm来说,就有点难度了,对于第一次使用WPF的人来说,即使你编程基础,也很难拿捏WPF的布局模式的。
虽然WinForm和WPF有很多共同点,首先要说的就是停靠(Dock)的概念,其实这种概念两个桌面框架都有,只不过叫法不一样。
WinForm想要停靠一个方向,只需要给控件的Dock属性设置一个方向即可,同一个容器若有多个控件向一个方向停靠,那么这些控件会很有顺序得排在一起。
而WPF如果想要做到这一点,就必须先声明一个DockPanel控件,在设置DockPanel的子控件停靠方向,这样子控件才会有序排列,否则的话,这些控件都会堆在一起。
还有一点,也是WinForm和WPF最大的区别,那就是WinForm的初学者通过使用绝对定位(Location),基本上就可以完成一个界面的控件布局,但是WPF则需要你懂一些Xaml语法,否则你很难得到一个你想要的界面布局。
得亏我当初在学习编程的时候是学过HTML的,Xaml其实和HTML并没有太大区别,都是标记语言嘛,有些东西都是相通的。
所以,我在学习WPF的时候其实并没有费太多的脑细胞,再加上现在有AI加持,学起来很快。
我现在玩转WPF甚至要比我认识的一些一直在写WPF项目的“老师傅”还要溜!
WPF相比WinForm最大的优势其实就是数据动态绑定(Binding)这一块,我不吹Mvvm,因为这玩意基本上和MVC模式差不多,WPF的Mvvm我始终没有发现有什么好的地方(仅个人观点)!
假设一个界面上有100条控件的数据需要读写,WinForm需要为这100条数据单独写一个读的方法和一个写的方法,一个一个去读写每个控件的值。
而WPF的数据动态绑定则不需要,直接在Model
里面定义一个包含这100个控件的实体,然后给100个控件的Binding属性设置对应的实体字段名就可以将实体的值显示在控件上了。
再加上双线绑定(TwoWay),界面控件值改变时,实体值也跟随改变,再也不用在保存数据时一个一个从控件上去读取了。
而WPF相对于WinForm还有一个优势,那就是界面真不卡!
WinForm有一个很大的缺点,那就是当界面上的控件比较多的时候,能够很明显感觉到页面在刷新时会“闪”,所谓的闪,其实就是因为WinForm的界面刷新机制导致的,它需要一个一个将控件刷新出来,所以控件一多,难免会出现控件刷新不及时导致的界面“闪”的错觉。
而WPF几乎没有这个问题,不管界面上有多少控件,只要你电脑内存和CPU能撑得住,界面怎么刷新都不会出现像WinForm那样“闪”的情况。
这也是我最喜欢WPF的一点,写这么多年WinForm,界面“闪”的问题我其实一直没有完美解决过(别说DoubleBuffer)!
另外,WinForm和WPF还有一个很大的区别,那就是WPF更加现代化!
现代化这个词其实定义起来很模糊,其实WinForm想要现代化也很容易,只需要你GDI+玩得很溜,WinForm一样可以现代化!
但是,WinForm有个很大的问题,就是不支持“透明”!
在WinForm里面,几乎所有透明都是假透明,它不过是将控件的背景强行绘制成父控件的样子而已。
这么说大家可能没有概念,我举个例子:
不知道大家有没有看过这种视频:一个人在一个电线杆子上绘画,将电线杆子背后的景色画在了电线杆子上,最后,电线杆子和背景融为一体,从远处看,电线杆子就像消失了一样。
WinForm的透明,大致就是这个意思!
它不是控件背景穿透,而是那个“电线杆子”!就像当初在设计WinForm这个框架时,工程师给大家变了一个“魔术”!
而WPF相对于WinForm来说,很多很简单的效果WPF需要绕多弯路才可以做到,没有像WinForm那样简单直接。
但是,WPF的优势也很明显,就是它有无限可能!
当然,抛开前端不谈,其实两者的后端代码在写的时候并无太大区别。
尤其是我听说有些用WPF的程序员不喜欢在写WPF软件的时候使用GDI+,但是我觉得,WPF+GDI加才是最棒的!
这就是我对WinForm和WPF的看法,不喜勿喷!
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.