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 的特性
- 文档和打印
- 安全性、可访问性与本地化
- 提供与 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 架构的组件
- 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 中,转到“文件” > “项目”
第二步) 在新建项目窗口中
- 选择 WPF 应用
- 输入名称为“MyWPF”
- 点击确定
步骤 3) Visual Studio 默认创建两个文件
- XAML 文件 (MainWindow.xaml)
- CS 文件 (MainWindow.xaml.cs)
MainWindow.xaml 包含
- 一个设计窗口
- XAML 文件
在 XAML 窗口中,默认会写入以下标签
Grid 是默认的第一个元素。
MainWindow.xaml.cs 包含与 XAML 设计文件对应的后台代码
步骤 4) 在工具箱中,
- 将 TextBox 元素拖到设计窗口
- 一个 TextBox 将出现在设计窗口中
- 您将看到 TextBox 的 XAML 代码已被添加
第五步) 将文本更改为“第一个 WPF 程序”。
步骤 6) 点击“开始”按钮
步骤 7) 您将在输出中看到一个窗口
恭喜!您已经设计并创建了您的第一个 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 页面可以共存于同一个应用程序中