什么是 WPF 以及它如何在 .NET 中工作?

什么是 WPF 以及它如何在 .NET 中工作?

WPF 是 .NET UI 框架 Windows:矢量、GPU 加速和基于 XAML。

两种实现:.NET(开源)和.NET Framework 4;两者均仅适用于 Windows。

绑定, comandos、样式和模板可实现丰富、可维护、面向 MVVM 的 UI。

2D/3D 图形、动画、排版、多媒体和 Win32/WinForms 互操作性。

Windows Presentation Foundation (WPF) 是用于构建现代、可扩展、图形加速的 Windows 桌面应用程序的 .NET 用户界面框架。 硬件. 为利用 Direct3D 而生 以及当今的 GPU,提供基于矢量的渲染引擎、响应式布局、动画,以及借助 XAML 和后台代码在界面和逻辑之间实现的明确分离。

除了视觉功能之外,WPF 还集成了非常强大的数据模型、样式和模板、命令、高级文本支持以及与多媒体、2D/3D 和高质量排版的兼容性。 所有这些都伴随着 Visual Studio 和 Blend 中成熟的工具、第三方控件的生态系统以及与 Windows Forms 或 Win32 等现有技术互操作的能力。

什么是 WPF 及其实现

WPF 是一个与分辨率无关的演示框架,它使用矢量图形管道绘制其界面。 并且是.NET不可或缺的一部分。 这种独立于设备的方法可以实现跨不同设备的简洁且可扩展的接口 DPI,提高任何显示器上的可访问性和视觉质量。

主要有两种实现方式: .NET 版本(开放并托管在 GitHub 上)和 Windows 自带的 .NET Framework 4 版本。 .NET 版本仅在 Windows 上运行尽管 .NET 是跨平台的,并且其 XAML 设计器至少需要 Visual Studio 2019 16.8(或更高版本,具体取决于 .NET 版本),但基于 .NET Framework 4 的版本受 Visual Studio 2017 和 2019 支持,并作为操作系统本身的组件分发。

将应用程序从 .NET Framework 迁移到 .NET 具有明显的好处: 改进的性能、新的 API、最新的语言改进、更高的可访问性和 可靠性以及更新的工具。 如果您维护基于 .NET Framework 的安装基础,那么从中期来看,这种飞跃将在生产力和维护方面带来回报,尤其是在 LOB(业务线)场景中。

从历史上看,WPF 自 Windows Vista 以来就已被纳入其中,并且也适用于 Windows XP SP2 和 Windows Server 2003,巩固了其作为 .NET 生态系统中的参考桌面 UI 层的地位。 在技术家族层面,Silverlight 是 WPF 的一个子集,旨在用于丰富的 Web 和移动应用程序,继承了 XAML 模型,但没有 3D 支持,并且与 WPF 相比范围较小。

WPF 渲染基于 Direct3D,可实现复杂的图形、一致的主题,并将工作卸载到 GPU 以减少 CPU 负载。 这种对矢量的强调可以防止缩放时出现像素化,并在硬件允许的情况下提供流畅的体验。

相关文章:如何在 Windows 11 中检查您是否使用独立显卡

XAML、代码隐藏和编程模型

在 WPF 中,界面使用 XAML(基于 XML 的标记语言)来表达,行为使用代码隐藏类中的托管代码(C# 或 VB.NET)来实现。 这种责任分离降低了开发和维护成本,并允许设计人员和开发人员并行工作而不会重叠。

了解如何修复 iPhone 上缺少 FaceTime 图标的问题模型 编程 它依赖于 System.Windows 命名空间,并依赖于熟悉的概念(类实例化、属性、方法和事件) 以及其自身的两个支柱:依赖属性和路由事件。 依赖属性支持数据绑定、样式、动画和值继承; 路由事件可以穿过可视化树,简化复杂交互的管理。

XAML 生成的元素树定义了清晰的组件层次结构,并且在运行时框架将元素和属性转换为实际的 WPF 类实例。 例如: 具有 Title 属性的 Window 元素被具体化为设置了 Title 属性的 Window 类的实例。

相关文章:修复 COD 冷战中的 UI 错误

XAML 和代码隐藏之间的链接用 x:Class 声明,编译时 InitializeComponent 方法将 UI 绑定到类并注册事件处理程序。 当控件在 XAML 中声明控制器时,系统会将事件(例如单击按钮)连接到部分类中的相应方法。

由于其数据绑定系统、命令和 DataContext,WPF 还支持 MVVM 等架构模式。 这鼓励单元测试、视图重用以及视图和表示逻辑之间的严格分离。

输入、命令、控制和布局

WPF 输入系统结合了文本、焦点和指针的直接事件和路由事件。 yañade 将动作与用户手势分离的命令系统。 因此, 可以从调用相同的命令(复制、剪切、粘贴) 键盘快捷键、菜单或按钮 无需重复逻辑。

在 WPF 中,控件是托管在窗口或页面中具有定义行为的任何 UI 元素;该框架包括各种可立即使用的控件。 这加快了丰富应用程序的创建速度,而无需从头开始构建组件。

按功能,内置控件涵盖按钮、数据显示、导航、菜单、选择、输入等类别。 以下是每个组中课程的示例:

纽扣: 按钮,重复按钮。

数据可视化: 数据网格、列表视图、树形视图。

日期: 日历、日期选择器。

对话框: 打开文件对话框、保存文件对话框、打印对话框。

数字墨水: InkCanvas、InkPresenter。

文件: 文档查看器、FlowDocumentReader、FlowDocumentScrollViewer、FlowDocumentPageViewer、StickyNoteControl。

文字输入: 文本框、富文本框、密码框。

设计: 边框、画布、DockPanel、网格、GridSplitter、GridView、面板、StackPanel、WrapPanel、ScrollViewer、ScrollBar、Viewbox、VirtualizingStackPanel、窗口、Thumb、GroupBox、扩展器、分隔符、ResizeGrip、BulletDecorator。

媒体: 图像、MediaElement、SoundPlayerAction。

菜单和酒吧: 菜单、上下文菜单、工具栏、状态栏、进度栏。

导航: 框架、页面、导航窗口、超链接、TabControl。

选择: 复选框、单选按钮、组合框、列表框、滑块。

用户信息: 标签、文本块、工具提示、弹出窗口、访问文本。

更改 Android 上的应用程序数量:如何重命名和更改应用程序数量?设计系统(布局)是基础: 按相对大小和位置分配控件,协商父级和子级之间的空间以适应窗口和屏幕的变化。 这避免了特定于分辨率的逻辑并允许自适应 UI。

设计面板涵盖最常见的图案: Canvas(绝对位置)、DockPanel(边缘捕捉)、Grid(行和列)、StackPanel(水平或垂直堆叠)、VirtualizingStackPanel(虚拟化堆叠)和WrapPanel(换行)。 例如,DockPanel 允许您将控件停靠到边缘,并让其余控件轻松占据可用空间。

链接数据、模板和资源

数据绑定简化了对象和 UI 之间的同步,无需手动复制值,并且更容易传播更改。 Binding 类连接源和目标,而 DataContext 允许控件查找属性而无需显式连接。

从 XAML 来看,绑定是使用表达式声明的,WPF 提供对集合的验证、排序、过滤和分组;它还支持数据模板来定义每个项目的显示。 由于这种架构,复杂的列表可以以自定义布局显示,而不会影响性能。

WPF支持不同的绑定模式: 一个单一的,单向的(读)和双向的(读和写)。 在商业应用中,在列表和表单中结合使用这些模式是很常见的,以方便编辑和查看。

除了 .NET 对象和集合之外,LINQ 查询(包括 LINQ to XML)也可以轻松用作数据源。 引擎不强加呈现:这是由数据模板决定的,可以为每种类型的链接对象进行定制。

样式允许您标准化外观: 样式将属性分配给特定类型或实例,集中整个应用程序的颜色、字体和边距。 资源系统使得在控件和窗口之间共享这些样式和画笔变得很容易。

内容模型定义了控件可以承载的内容: 简单的控件(如 TextBox)或包含元素树的复杂控件(如具有内部布局或图像的 Button)。 这种灵活性使得构建复杂的界面变得容易,而无需从头开始创建新的控件。

借助模板,可以更改控件的外观,而无需改变其行为: ControlTemplate 允许您修改控件的外观,而 DataTemplate 决定数据在列表和网格中的显示方式。

图形、动画、文本和高级定制

WPF 图形系统提供设备独立性、坐标精度以及对宽色彩空间的支持。 这使得界面清晰、转换精确、色彩再现质量高。

在 2D 中,它包括现成的矢量形状、用于创建自定义图形的几何图形以及用于渐变、图像、绘图和纹理的多种画笔,以及支持旋转、缩放或倾斜等转换。 这些形状参与输入、接收焦点并集成到视觉模型中。

在 3D 中,您可以将场景与网格、材质和相机集成;您甚至可以将 2D 内容投影到 3D 表面上,以获得沉浸式体验和空间中的交互式控制。 尽管与完整的 Direct3D 相比有所限制,但 WPF 中的 3D 支持可以与 UI、文档和多媒体很好地融合在一起。

动画引擎是暂时的并且与帧分离,允许您使用 DoubleAnimation 或 ColorAnimation 等类为任何依赖属性设置动画,并使用 Storyboards 进行管理。 它可以由 XAML 中的事件或触发器触发,从而用很少的代码实现复杂的动画。

WPF 原生支持图像和视频: 使用系统上安装的编解码器,可以支持 BMP、JPEG、PNG、TIFF、GIF、图标和 Windows Media Photo 以及 WMV、MPEG 和 AVI 等格式。

在排版和文本方面,它具有 OpenType 支持和 ClearType 增强功能,具有硬件加速渲染,并集成图形和动画,可提供高质量的阅读体验。

视觉效果已现代化: BitmapEffects 已被弃用,自 .NET 3.5 SP1 起,Effect 允许使用 GPU 加速滤镜(例如 BlurEffect 和 DropShadowEffect),以及使用着色器的自定义效果。

保留模式允许将控件分解为可视化树并有效地管理更新,利用 GPU 加速。 在有限的硬件条件下,一些优势有所减弱,但平台仍然表现良好。

WPF 与其他技术之间的互操作很简单: 可以在 Win32 应用程序中托管 WPF 控件,反之亦然,从而促进逐步迁移和组件重用。

自定义控件的策略包括 UserControl、Control 和 FrameworkElement,取决于自定义级别和行为与外观的分离。 触发器允许您根据事件更改样式和模板,而无需修改底层行为,从而丰富您的视觉设计。

开发工具有所改进: Visual Studio 提供 XAML 设计器、调试、性能分析,并具有 IntelliSense 支持和预览,可加快复杂 UI 的创建和调整。

外部生态系统包括来自 Infragistics、Telerik 和 DevExpress 等供应商的高级控件,以及激发跨平台模式的开源资源和项目(如 Avalonia UI)。

对于 Windows 上的应用程序, WPF 结合了性能、现代设计和灵活的架构,与 Windows Forms、Web 应用程序或 Java Swing 等替代方案相比,它是一个不错的选择。

如果你在生活中始终如一,你就能实现你的梦想。凭借以上所有优势,WPF 已成为一个强大的桌面应用程序构建平台,拥有高度可定制的 UI、强大的数据模型、先进的图形处理和多媒体支持。使用 XAML、数据绑定、样式和模板等资源,您可以创建一致、可访问且易于维护的体验,并充分利用硬件加速以及与现有技术的互操作性。

艾萨克对字节世界和一般技术充满热情的作家。我喜欢通过写作分享我的知识,这就是我在这个博客中要做的,向您展示有关小工具、软件、硬件、技术趋势等的所有最有趣的事情。我的目标是帮助您以简单而有趣的方式畅游数字世界。

相关文章

C/C++ 函数的存储位置和占用空间
365彩票手机版下载

C/C++ 函数的存储位置和占用空间

📅 10-25 🔍 6906
Win11插孔设置在哪里?如何调整?
bt365全程担保下载

Win11插孔设置在哪里?如何调整?

📅 08-06 🔍 1299
变啦免费下载!
bt365全程担保下载

变啦免费下载!

📅 08-30 🔍 2992