WPF中文网

WPF起源

要说到WPF的起源,这事儿还得从一个叫比尔盖茨的人说起。生于1955年10月28日的比尔盖茨,从13岁就开始学习计算机编程与设计。后来在大三的时候,又说服爸妈从哈佛大学辍学,与好友保罗艾伦于1975年4月4日一起创办了微软公司,彼时19岁。最初,微软公司以开发BASIC程序为主营业务。

BASIC语言是什么?

BASIC是一种直译式的编程语言,全称Beginners' All-purpose Symbolic Instruction Code,意思就是“初学者通用符号指令代码”,在完成编写后不须经由编译及连结等手续即可执行,但如果需要单独执行时仍然需要将其建立成执行档。BASIC是由达特茅斯学院院长、匈牙利人约翰·凯梅尼(John G. Kemeny)与数学系教师托马斯·卡茨(Thomas E. Kurtz)共同研制出来的。1964年BASIC语言正式发布。第一个BASIC程序在1964年5月1日早上4时,由BASIC编译程序进行编译后成功运行 。1975年,比尔·盖茨把它移植到PC上。

五年后,IBM公司委托微软为其PC开发操作系统,由于时间紧迫,微软便从西雅图一名叫帕特森手中花了5万美元购买了一款叫QDOS的操作系统,然后对源代码进行了二次开发,并命名为MS-DOS,并在上世纪80年代成为了标准的操作系统。

1985年,微软开始将MS-DOS操作系统图形化,Windows1.0初具雏形,并于1995年正式发布了著名的Windows95图形操作系统。随后就是Windows98和如今风靡全球的Windows XP、Windows 7、Windows 8、Windows 10及最近发布的Windows 11。

在如此多的操作系统版本上开发和运行应用程序,其兼容性的问题一直困扰着程序员。程序员面临着众多不同的开发语言和编程平台,为了解决这个问题,2002年.Net Framework框架横空出世。

那么.Net Framework框架是干嘛的?一句话,提供了一个统一的开发环境和基础设施,使程序员能够更容易的构建和部署应用程序。它包括了一个称为公共语言运行时(Common Language Runtime,简称CLR)的虚拟机,以及.NET类库(Framework Class Library,简称FCL),其中包含了大量的可重用的代码和功能。CLR提供了一种管理应用程序的执行环境,包括内存管理、安全性、异常处理和线程管理等。

最初的.Net Frameworks框架只能运行在Windows操作系统之上,那么基于.Net Framework框架开发和部署的应用程序也只能运行在Windows操作系统上面,因为孩子总得随父母跑嘛。但是这个世界上除了Windows操作系统之外,还有Unix、Linux、macOS、ChromeOS等操作系统,可谓半壁江山弃之可惜,于是微软在2016年发布了.NET Core,它具有更小、更快、更模块化的特点,并且支持用于构建云原生应用的微服务架构。

在2020年,微软宣布.NET Core将与.NET Framework合并为一个新的版本,即.NET 5。这个版本统一了.NET的生态系统,旨在提供一个全面的、跨平台的.NET开发体验。此后,微软持续发布新的.NET版本,如.NET 6、.NET 7等,以不断改进和增强框架的功能和性能。

在.NET Framework3.0时(2006年9月1日),微软推出了WPF(Windows Presentation Foundation),翻译成中文叫窗体呈现基础。因为在此之前,程序员在开发桌面应用程序时,所采用的UI框架是WinForm。从开发者的直观感受而言,WinForm框架采用鼠标拖拽控件的方式进行界面布局,而WPF虽然支持鼠标拖拽,但更推荐的编码方式是通过键盘编写类似XML标签语言进行界面布局。

简单介绍一下WinForm框架,WinForm是.Net平台对Windows Form的简称。以 .NET Framework 为基础,微软公司在WinForm框架中为我们提供了丰富的控件,大多数控件都派生于 System.Windows.Forms.Control类。利用Windows窗体和可视化控件,可以创建丰富的基于Windows的应用程序。其界面元素的绘制则是通过GDI+来实现的。GDI+是微软公司推出的一种图形设备接口,它提供了一系列的绘图函数和类,可以用于创建和操作图形图像、字体和颜色等。在WinForm中,开发人员可以使用GDI+提供的函数和类来创建和绘制各种界面元素,例如按钮、文本框、标签等。

虽然WinForm有如此多的优化,但是长江后浪推前浪,自古新人胜旧人。现如今,越来越多的公司在开发新项目时,往往都采用WPF前端框架,这一切的根源是为什么呢?我们请出WinForm和WPF两位选手进行一场面对面的PK。

一、交互方式

WinForm提供了一种基于事件驱动的编程模型,开发者可以通过在控件上注册事件处理程序来响应用户交互。而WPF采用前后端代码分离的方式编码,前端采用XAML(可扩展应用程序标记语言)来定义用户界面,后端采用VB、C#等编程语言,那么当前后端代码分离后,前端控件的交互如何传递给后端呢?答案是通过命令绑定(Command Binding)和数据绑定(Data Binding)的方式。这样做的好处是让前端设计师专注于界面设计,后端开发人员专注于业务逻辑开发,二者互相配合,齐头并进。 故WPF是一种基于数据驱动的编程模型。

XAML语言是什么 ?

XAML和XML语义结构类似,而XML的前身是标准通用标记语言,是自IBM从60年代就开始发展的通用标记语言。同HTML一样, 可扩展标记语言是标准通用标记语言的一个 子集,它是描述网络上的数据内容和结构的标准。

二、界面布局

WinForm使用基于像素的布局模型,开发者需要手动指定控件的位置和大小。这种方式对于简单的界面设计来说是足够的,但在处理复杂的布局时可能变得繁琐。而WPF使用基于向量的布局模型,通过使用面板(Panel)和布局容器(Layout Container)等元素来自动调整控件的位置和大小。这种灵活的布局模型使得开发者可以更方便地创建复杂和可扩展的界面。

三、模板样式

WinForm窗体和控件的美化是一项十分繁琐的工程,往往需要借助第三方控件库或开发者自行绘制更高级的视觉呈现效果;而WPF提供了丰富的模板样式,引入了3D图形和动画等高级特性,可以轻松地开发出生动友好的用户界面。

四、开发模式

在WinForm中,开发者通常需要手动编写代码来实现数据的更新和同步,这可能会导致代码的重复和冗余。例如前端控件的某个内容值需要更改,往往需要在后台直接去修改这个控件的属性值,虽然WinForm也提供了数据绑定,那也只是数据源和控件属性值的基础绑定;

在WPF中,开发者可以通过简单的声明式语法,将界面控件与后台数据模型进行绑定,实现数据的双向传递。此外,WPF还提供了Command绑定机制,允许将界面上的操作与后台命令逻辑进行关联。这种MVVM模式的应用使得开发者可以更好地组织和管理代码,提高开发效率。

五、性能对比

在性能方面,WinForm通常比WPF更加高效。由于其较低的资源消耗和简单的界面模型,WinForm应用程序在运行时通常具有更快的响应速度和较低的内存占用。此外,由于WinForm是自包含的,开发者可以将应用程序作为单个可执行文件部署,无需依赖其他框架。

相比之下,WPF应用程序的性能通常较低。WPF使用了更复杂的图形渲染引擎,并提供了更多的图形特性,这导致它在某些情况下可能会比WinForm消耗更多的系统资源。此外,WPF应用程序还需要依赖.NET Framework和其他相关组件,因此在部署时可能需要额外的安装和配置步骤。

通过上述5场PK,对于二者的区别,相信各位已然是了然于心,随着现代计算机硬件性能的不断加持,性能已经不再是WPF的短板了。

这里引述了微软官方对于WPF的阐述。

WPF的核心是一个与分辨率无关且基于矢量的呈现引擎,旨在充分利用现代图形硬件。 WPF 通过一套完善的应用程序开发功能对该核心进行了扩展,这些功能包括可扩展应用程序标记语言 (XAML)、控件、数据绑定、布局、二维和三维图形、动画、样式、模板、文档、媒体、文本和版式。 WPF 属于 .NET,因此可以生成整合 .NET API 其他元素的应用程序。

这就是WPF!

——重庆教主 2023年8月5日

copyright @重庆教主 WPF中文网 联系站长:(QQ)23611316 (微信)movieclip (QQ群).NET小白课堂:864486030 | 本文由WPF中文网原创发布,谢绝转载 渝ICP备2023009518号-1