WPF 新手教程

什么是 WPF?

WPF 是一个用于构建 Windows 应用程序的框架,它允许用户以较少的代码复杂性开发具有 3D 动画和丰富色彩的丰富用户界面。它是一个基于矢量的渲染引擎,利用现代显卡的硬件加速功能,使 UI 更快、可扩展性更强。WPF 是 Windows Presentation Foundation 的缩写。

WPF 可以看作是 WinForms 的演进。它为 Windows 产生了一个易于操作的图形显示系统。它提供了 UI 和业务逻辑之间的轻松分离。

WPF 应用程序可以作为独立的桌面程序部署在您的系统中,也可以作为嵌入对象托管在网站中。

为什么选择 WPF?

使用 WPF 平台的原因有很多,其中一些突出的原因是:

  • 如果您需要处理各种媒体类型,这是一个理想的平台
  • WPF 允许您创建可换肤的用户界面。当您需要加载部分 UI 或希望绑定 XML 数据时,它也很有帮助
  • 它允许您利用庞大的 .NET 类库,因为它建立在 .NET 技术之上
  • 分辨率无关性,因此使用 WMF 开发的应用程序可以在移动设备或 20 英寸的显示器上运行
  • WPF 构建在 DirectX 而不是 WinAPI 之上。它利用了客户端计算机的图形系统。因此,提供了更强的图形渲染能力
  • 支持流文档模型,实现了“桌面出版”质量的布局
  • 外观和行为是松散耦合的。这使得设计师和开发人员可以在两个独立的模型上工作
  • 在 WMF 框架中,您可以在简单的 XML 文档上进行图形化设计,而无需解析代码
  • 允许您使用硬件加速来绘制 GUI,以获得更好的性能

WPF 的历史

Windows 1.0 是微软的第一个 GUI 环境。它作为 DOS 之上的一层工作,依赖于 GDI 和 USER 系统进行图形和用户界面处理。

DirectX 于 1995 年推出,是一个高性能图形系统。它主要面向游戏和其他图形相关环境。多年来,发布了许多版本,其中 DirectX 9 提供了一个可与托管 .Net 代码一起使用的库。

WPF 版本 发布年份 .Net 版本 Visual Studio 版本 功能
3.0 2006 3.0 不适用 初始发布。
但是,WPF 开发可以用 VS 2005 完成。
3.5 2007 3.5 VS 2008 修改和改进
应用程序模型、绑定、控件、文档、注释和 3D UI 元素。
3.5 SP1 2008 3.5 SP1 不适用 原生启动画面支持。新的 Web 浏览器控件,DirectX 像素着色器支持。
4.0 2010 4.0 VS 2010 新控件:日历(Calendar)、数据网格(DataGrid)、日期选择器(DatePicker)。多点触控和操作。
4.5 2012 4.5 VS 2012 更快的设置时间和改进的位图效果性能。新控件:日历(Calendar)、数据网格(DataGrid)、日期选择器(DatePicker)。
多点触控和操作
4.5.1 2013 4.5.1 VS 2013 新的 Ribbon 控件
新的 INotifyDataErrorlnfo 接口
4.5.2 2014 4.5.2 不适用 无重大变化
无重大变化
4.6 2015 4.6 VS 2015 透明子窗口支持
HDPI 和触摸改进

WPF 5.0.6 的最新稳定版本于 2021 年 4 月发布。

WPF 的特性

Features of WPF
WPF 的特性
  • 文档和打印
  • 安全性、可访问性与本地化
  • 提供与 Windows Forms 控件的互操作性
  • Direct3D 用于性能要求高的图形应用程序
  • 使用显卡硬件进行渲染
  • 基于矢量的图形允许您在不损失质量的情况下缩放应用程序
  • WPF 支持浮点逻辑像素系统和 32 位 ARGB 颜色
  • 重新定义样式和控件模板
  • 从复合字体构建国际字体
  • WPF 文本渲染可帮助您利用 ClearType 技术
  • 允许您使用在视频内存中缓存预渲染文本的技术
  • 每个控件都采用基于资源的方法
  • 演示计时器由 WPF 初始化和管理
  • 视频和动画之间的关系也得到支持
  • 在 WPF 中,样式是一组应用于内容以进行视觉渲染的属性
  • WPF 中的模板可帮助您更改文档的 UI
  • 命令是事件的更抽象和松散耦合的版本
  • WPF 对命令的支持减少了我们需要编写的代码量

接下来在这个 WPF C# 教程中,我们将学习 WPF 的核心类型和基础设施。

WPF 核心类型和基础设施

WPF 中的类分为四种不同类型

  • UIElement
  • FrameworkElement
  • ContentElement
  • FrameworkContentElement

这些类被称为基础元素类。它为构成用户界面的模型提供了基础。

WPF 用户界面由元素组成,这些元素以树状层次结构组装。这被称为元素树。元素树是布局用户界面的一种直观方式。它是一种允许您获得强大 UI 服务功能的结构。

XAML

可扩展应用程序标记语言,称为“XAML”或“zammel”,是定义用户界面的一种声明性方式。

这是一个简单按钮的 XAML 定义

<Button
FontSize="16"
HorizontalAlignment="Center"
VerticalAlignment="Center"
>
Say Hello Guru99</Button>

使用 XAML 语言的优势

  • XAML 将前端外观与后端逻辑分离
  • XAML 是表示用户界面的最简单方法
  • XAML 能与工具高效协作

控件

WPF 框架支持许多有用的控件,例如

  • 编辑控件,如 TextBox、CheckBox、RadioButton
  • 列表控件,如 ListBox、ListView、TreeView
  • 用户信息,如 Label、WPF ProgressBar、ToolTip
  • 操作,如 Menu、Button 和 ToolBar
  • 外观,如 Border、WPF Image 和 Viewbox
  • 通用对话框,如 OpenFileDialog 和 PrintDialog。
  • 容器,如 TabContro、ScrollBar 和 GroupBox
  • 布局,如 DocPanel、StackPanel 和 Grid
  • 导航,如 Frame 和 Hyperlink

控件的外观可以通过样式和模板进行自定义,而无需编程。您还可以通过从适当的基类派生新类来创建自定义控件。

外观

WPF 提供了自定义应用程序外观的功能。它允许您为字体、背景等设置对象和值。

样式功能允许您为整个产品标准化特定的外观。它允许您替换默认外观,同时保留其默认行为。

数据模板允许您控制绑定数据的默认可视化。借助主题,您可以轻松地从操作系统中可视化样式。

布局与面板

布局有助于正确地定位和调整控件大小。它是为用户构成演示过程的一部分。WPF 框架简化了布局过程,并提供了更好的 UI 外观适应性。

布局基础结构由各种类提供,它们是 1) StackPanel 2) DockPanel 3) WrapPanel 4) Grid 和 5) Canvas

图形

WPF 提供了一个改进的图形系统,例如

  • WPF 使用与设备无关的单位,从而实现了分辨率和设备的独立性。因此,每个与设备无关的像素都会随着系统的每英寸点数设置自动缩放。
  • WPF 使用 double 而不是 float,并支持更广泛的颜色
  • WPF 图形引擎的设计方式使其能够在可用时利用图形硬件

文档和打印

WPF 框架提供三种类型的文档

  • 固定文档: 这种类型的文档支持所见即所得 (WYSIWYG) 的演示。
  • 流文档: 允许您根据运行时变量(如窗口大小和设备分辨率)调整和重排内容。
  • XPS 文档: 它是以基于 XML 的格式表示电子纸的分页表示。XPS 是一种开源和跨平台的文档格式。

WPF 能够更好地控制打印系统。它包括远程打印和队列。此外,XPS 文档可以直接打印,而无需将其转换为打印格式。

WPF 架构

WPF 是 .NET 框架的一部分。它包含托管代码和非托管代码。WPF 架构的重要组件在下图中进行了解释。

WPF Architecture
WPF 架构

WPF 架构的组件

  • PresentationFramework: 帮助您创建顶层元素,如控件、样式、布局、窗口等。
  • PresentationCore: 它包含基础类型,如 UIElement、Visual,所有控件和形状都从 PresentationFramework.dll 中派生而来。
  • CLR: 它通过提供内存管理、错误处理等功能,使开发过程更有效率。
  • Milcore: Milcore 是非托管代码的一部分,它与 DirectX 紧密集成。
  • DirectX: 它是允许渲染 WPF 图形的底层 API。DirectX 与驱动程序交互并渲染内容。
  • User32: 这是一个核心 API,被许多程序广泛使用。它管理内存和进程分离。User32 帮助您决定哪个元素将放在屏幕的哪个位置。
  • 内核 (Kernel): 输入源于内核模式设备驱动程序上的信号,并通过与 Windows 内核和 User32 连接,被路由到正确的进程。

WPF 安装

请参考此链接安装 WPF https://guru99.com.cn/download-install-visual-studio.html

接下来,在这个 WPF 应用程序教程中,我们将构建我们的第一个 WPF。

如何创建您的第一个 WPF 应用程序?

在这个 WPF 示例中,我们将开发一个基本的 WPF 应用程序。那么,让我们按照下面 WPF 应用程序示例中给出的步骤开始简单的实现吧。

第一步) 在 Visual Studio 中,转到“文件” > “项目”

Create your first WPF Application

第二步) 在新建项目窗口中

  1. 选择 WPF 应用
  2. 输入名称为“MyWPF”
  3. 点击确定

Create your first WPF Application

步骤 3) Visual Studio 默认创建两个文件

  • XAML 文件 (MainWindow.xaml)
  • CS 文件 (MainWindow.xaml.cs)

Create your first WPF Application

MainWindow.xaml 包含

  1. 一个设计窗口
  2. XAML 文件

Create your first WPF Application

在 XAML 窗口中,默认会写入以下标签

Create your first WPF Application

Grid 是默认的第一个元素。

MainWindow.xaml.cs 包含与 XAML 设计文件对应的后台代码

Create your first WPF Application

步骤 4) 在工具箱中,

  1. 将 TextBox 元素拖到设计窗口
  2. 一个 TextBox 将出现在设计窗口中
  3. 您将看到 TextBox 的 XAML 代码已被添加

Create your first WPF Application

第五步) 将文本更改为“第一个 WPF 程序”。

Create your first WPF Application

步骤 6) 点击“开始”按钮

Create your first WPF Application

步骤 7) 您将在输出中看到一个窗口

Create your first WPF Application

恭喜!您已经设计并创建了您的第一个 WPF 应用程序。接下来,在这个 WPF 新手教程中,我们将看到 WPF 和 WinForms 之间的区别。

WPF vs. WinForms

WPF WinForms
它是一个较新的框架,因此更符合当前标准。 它比较老,所以经过了更多的尝试和测试。
它灵活且功能丰富。您可以设计非常丰富的应用程序,而无需编码或购买控件。 功能不那么丰富
第三方控件的开发者专注于与 WPF 的兼容性,因为这是未来的趋势。 有许多第三方控件可以购买或免费获取。
XAML 允许您轻松创建和编辑您的 GUI。它允许将工作分配给设计师(XAML)和程序员(C#、ASP.net 等)。 在 Windows Forms 中,所有的代码都写在一个地方。
WPF 可以为 Windows 应用程序和 Web 应用程序(如 Silverlight 和 XBAP)创建用户界面。 无此类支持
WPF 的内置控件套件有限 内置控件非常强大

使用 WPF 构建的应用程序类型

  • WPF 试图取代 WebForms 和 Windows Forms——应用程序可以构建为在浏览器或独立窗口中运行
  • Windows Forms 和 WPF 页面可以共存于同一个应用程序中
  • 您可以开发页面/窗口应用程序

快速指南

  • WPF 的全称是 Windows Presentation Foundation
  • 如果您需要处理各种媒体类型,这是一个理想的平台
  • Windows 1.0 是微软的第一个 GUI 环境,它在 DOS 上运行,并依赖 GDI 和 USER 系统
  • .NET 中的 WPF 提供了与 Windows Forms 控件的互操作性
  • WPF 分为四种不同类型,如 UIElement、FrameworkElement、ContentElement 和 FrameworkContentElement
  • WPF 架构最重要的组成部分是 PresentationFramework、PresentationCore、CLR、Milcore、DirectX、User32 和 Kernel
  • 与 WinForms 相比,WPF 是一个较新的框架,因此更符合当前标准
  • Windows Forms 和 WPF 页面可以共存于同一个应用程序中