WPF和WinForm的区别
WPF,即windows presentation foundation,windows呈现基础,属于.net framework3.0,是微软推出取代winform的产品,能做到分离界面设计人员与开发人员的工作,提供多媒体交互用户图形界面,三大核心程序集是presentationcore、presentationFramework、windowsBase。
如下图是wpf的结构:它的设计器是用xaml语言来写的,就像写html一样。
WinForm是.Net开发平台中对Windows Form的一种称谓。Windows窗体可用于设计窗体和可视控件,以创建丰富的基于Windows的应用程序。Windows窗体提供了一套丰富的控件,并且开发人员可以定义自己有特色的新的控件。WinForm控件是指以输入或操作数据的对象。比如:ComponentOne是.net平台下对数据和方法的封装。有自己的属性和方法。属性是控件数据的简单访问者。方法则是控件的一些简单而可见的功能。包含在 .NET Framework 中的 Windows窗体类旨在用于 GUI 开发。
如下图是WinForm的结构:它的设计器是VS自带的控件进行拖拽,设置控件对应的属性,事件。
WPF和WinForm的对比
虽然WinForm上手方便但是也带来了一系列开发的问题
1.为了满足winform用户界面的需求, 所以也自然诞生了很多公司或者个人为其开启一套经常UI的统一处理的控件, 如市面上常见的有DevExpress 、DotenetBar 等等。所以自然就暴露出了新的问题, 使用了新的控件、那么自然会有一套新的数据获取方式、又需要去适应新的整套开发方式、而使用新的控件只是为了满足winform界面不丰富、或者更加强大的功能。
2.暂且不考虑第三方控件带来的新的问题、winform本身的开发模式、就存在着天然的缺陷, 举个例子, 按照常规的方式我们给一个winform控件进行数据绑定操作。按照事件驱动的模式, 他则是需要根据控件名来获取我们原始绑定的数据。 【 界面与数据完全耦合, 取数据在绑定之前已经知道数据的结构, 在获取的数据的时候却还要回过头去通过控件来找数据】
WPF的不同之处:
1.WPF不仅仅在支持原生的Winform旧模式的操作下,升级了一种全新的模式,也是就是MVVM模式(数据和视图分离), 不再为每个元素添加固定的名称, 然后通过后台进行事件进行业务代码编写。
2.一套扩展能力超强的UI界面, 与早期的GDI+/GDI不同。WPF是基于DirectX引擎的,支持GPU硬件加速,在不支持硬件加速时也可以使用软件绘制。高级别的线程绘制可以提高使用者的体验。自动识别显示器分辨率并进行缩放。
3.有诸多的新功能,诸如: 样式、触发器、命令、动画、模板 。
4.WPF和winform最大的区别在于WPF底层使用的DirectX((Direct Extension)多媒体编程接口,加强3D图形和声音效果,有很多API组成。按照性质分类可分为四大部分:显示部分,声音部分,输入部分和网络部分。),winform底层使用的是GDI+((Graphics Device Interface)图形设备接口,它的主要任务是负责绘图程序之间的信息交换、处理,所有windows程序的图形输出。),所以WPF的图形界面上更胜一筹。
数据驱动与事件驱动的对比
先从UI上分析,UI的功能是让用户观察和操作数据,为了能显示数据和响应用户的操作通知程序(通过事件来通知,如何处理事件又是一系列的算法),所以控件就是显示数据和响应用户操作的UI元素,也即:控件就是数据和行为的载体。
数据驱动型
什么是数据驱动UI呢?我们知道传统的GUI界面都是由windows消息通过事件传递给程序,程序根据不同的操作来表达出不同的数据体现在UI界面上,这样数据在某种程度上来说,受到很大的限制。 WPF中是数据驱动UI,数据是核心,处于主动的,UI从属于数据并表达数据,是被动的。WPF数据第一,控件第二。尽管WPF中,数据处以第一, 但是对于UI来说,WPF中的UI仍然是其出色的一部分。
事件驱动型
虽然控件没有数据重要,但是还是比较重要的,毕竟界面是门面啊,只是在数据面前,它比较”有礼貌”。那什么是事件驱动型呢?Winform中针对界面的元素进行操作, 所有业务都关联在当前窗口的后台, 而在此之前, 无奈你是双击事件的添加方式、还是后台绑定事件的方式,你都需要给每个元素一个固定规范的名称, 然后进行相关的数据操作。
三、总结
1.WinForm是“前后端”不分离的,wpf是前后端分离的。WinForm的设计器和CS文件的编码“耦合度”太高了,不能独立进行设计页面。
2.界面的UI肯定是wpf好看了,扩展性也比较高,但是前提是要会写样式,它对样式比较自由。
3.wpf 可以数据类似vue=>data绑定,使用Binding来进行数据的绑定轻松舒服的太多,WinForm没有这样的使用,控件的值需要内部赋值才能起到wpf的这块的效果。
4.控件自适应:wpf比WinForm好太多了,无论是界面布局还是窗体自适应方面。
5.但是WinForm的难度比wpf相对低,很适合小白入门,因为wpf你还要学习xaml的语法,它的布局方面对新手来说有点困难。
WPF和WinForm属于两套界面渲染方式。一个是对传统windows界面元素的封装,通过gdi绘制。另一个是全新的dx渲染绘制的界面,也脱离了对传统windows控件的依赖,没有历史包袱,理论上可以展现更炫酷的界面。对初级开发人员来说,没太大区别,类似的基本设计器是他们设计界面的主要手段,一样给事件编写代码。对初级以上开发人员来说,wpf需要学习xaml,有全新的ui描述语言,特别是可以通过模板的嵌套实现复杂的元素,通过style实现类似css的功能,通过比winform完善的多的数据绑定机制实现业务逻辑可以专心对数据而不是界面进行开发。前途来说,两者必定还会长期共存。深入理解winform对理解windows一些内部机制有好处。好好学习wpf可以更方便过度到其他xaml相关技术,这是微软目前广泛使用的技术。
我个人看来,WinForm适合小白入门,将控件进行拖拽选择对应的处理事件简单直接明了。而WPF其实不仅仅是图形引擎而已,它将给Windows应用程序的开发带来一次革命,因为新的架构提供了一种全新的开发模式。当然对于普通用户而言,最直观的就是界面越来越漂亮,看起来越来越舒服了;但对于开发人员而言,界面显示和代码将更好的得到分离,这与从前的桌面应用程序开发有很多不同(界面设置和代码是融合在一起的),这是比较具有革命性的改变之一,WPF的前景将是一片光明的。