什么是 Windows Presentation Foundation - WPF

什么是 Windows Presentation Foundation - WPF

欢迎使用 Windows Presentation Foundation 桌面指南(WPF),这是一个独立于分辨率的 UI 框架,它使用基于矢量的呈现引擎,旨在利用现代图形硬件。 WPF 提供了一组全面的应用程序开发功能,其中包括可扩展应用程序标记语言(XAML)、控件、数据绑定、布局、2D 和 3D 图形、动画、样式、模板、文档、媒体、文本和版式。 WPF 是 .NET 的一部分,因此可以生成包含 .NET API 其他元素的应用程序。

WPF 有两个实现:

.NET 版本(本指南):

GitHub 上托管的 WPF 的开源实现,该实现在 .NET 上运行。 XAML 设计器至少需要 Visual Studio 2019 版本 16.8。 但根据 .NET 版本,可能需要使用较新版本的 Visual Studio。

尽管 .NET 是一种跨平台技术,但 WPF 仅在 Windows 上运行。

.NET Framework 4 版本:

Visual Studio 2019 和 Visual Studio 2017 支持的 WPF 的 .NET Framework 实现。

.NET Framework 4 是仅限 Windows 的 .NET 版本,被视为 Windows作系统组件。 此版本的 WPF 随 .NET Framework 一起分发。

此概述适用于新用户,涵盖 WPF 的主要功能和概念。 若要了解如何创建 WPF 应用,请参阅 教程:创建新的 WPF 应用。

为何从 .NET Framework 升级

将应用程序从 .NET Framework 升级到 .NET 时,你将受益于:

性能更好

新的 .NET API

最新语言改进

改进了用户辅助功能和可靠性

更新的工具和其他功能

若要了解如何升级应用程序,请参阅 如何将 WPF 桌面应用升级到 .NET。

使用 WPF 进行编程

WPF 作为 .NET 类型的子集存在,主要位于命名空间中 System.Windows 。 如果以前使用 .NET 构建了具有 ASP.NET 和 Windows 窗体等框架的应用程序,则应熟悉基本的 WPF 编程体验,你:

实例化类

设置属性

调用方法

处理事件

WPF 包含更多编程构造,可增强属性和事件: 依赖属性 和 路由事件。

标记和代码隐藏

WPF 允许你使用 标记 和 后置代码来开发应用程序,这种开发体验应该是 ASP.NET 开发人员所熟悉的。 通常使用 XAML 标记来实现应用程序的外观,同时使用托管编程语言(后台代码)来实现其行为。 这种外观和行为的分离具有以下优势:

开发和维护成本会降低,因为特定于外观的标记与行为特定的代码没有紧密耦合。

开发更高效,因为设计人员在设计应用程序的外观时,可以与开发人员同时实现应用程序的功能。

WPF 应用程序的全球化和本地化 得以简化。

标记

XAML 是基于 XML 的标记语言,以声明方式实现应用程序的外观。 通常使用它来定义窗口、对话框、页面和用户控件,并用控件、形状和图形填充它们。

以下示例使用 XAML 实现包含单个按钮的窗口的外观:

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

Title="Window with button"

Width="250" Height="100">

具体而言,此 XAML 使用 Window 和 Button 元素定义窗口和按钮。 每个元素都配置了属性,例如 Window 元素的 Title 属性来指定窗口的标题栏文本。 在运行时,WPF 将标记中定义的元素和属性转换为 WPF 类的实例。 例如,Window 元素转换为 Window 类的实例,该类 Title 属性是 Title 特性的值。

下图显示了上一示例中 XAML 定义的用户界面(UI):

由于 XAML 是基于 XML 的,因此使用 XAML 撰写的 UI 在称为 元素树的嵌套元素的层次结构中组装。 元素树提供了创建和管理 UI 的逻辑直观方法。

代码隐藏

应用程序的主要行为是实现响应用户交互的功能。 例如,单击菜单或按钮,并在响应中调用业务逻辑和数据访问逻辑。 在 WPF 中,此行为在与标记关联的代码中实现。 此类代码称为代码隐藏。 下面的示例演示上一个示例的更新标记和代码隐藏:

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

x:Class="SDKSample.AWindow"

Title="Window with button"

Width="250" Height="100">

更新的 xmlns:x 标记定义命名空间并将其映射到为代码隐藏类型添加支持的架构。 该 x:Class 特性用于将代码隐藏类关联到此特定 XAML 标记。 考虑到此属性是在元素上声明的 ,代码隐藏类必须继承自该 Window 类。

using System.Windows;

namespace SDKSample

{

public partial class AWindow : Window

{

public AWindow()

{

// InitializeComponent call is required to merge the UI

// that is defined in markup with this class, including

// setting properties and registering event handlers

InitializeComponent();

}

void button_Click(object sender, RoutedEventArgs e)

{

// Show message box when button is clicked.

MessageBox.Show("Hello, Windows Presentation Foundation!");

}

}

}

Namespace SDKSample

Partial Public Class AWindow

Inherits System.Windows.Window

Public Sub New()

' InitializeComponent call is required to merge the UI

' that is defined in markup with this class, including

' setting properties and registering event handlers

InitializeComponent()

End Sub

Private Sub button_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)

' Show message box when button is clicked.

MessageBox.Show("Hello, Windows Presentation Foundation!")

End Sub

End Class

End Namespace

从代码隐藏类的构造函数调用 InitializeComponent,以将标记中定义的 UI 与代码隐藏类合并在一起。 (在构建应用程序时,会自动为你生成InitializeComponent,因此你无需手动实现它。)x:Class和InitializeComponent的结合确保每次创建时实现都会被正确初始化。

请注意,在标记中,

由于此样式面向所有 Button 控件,因此该样式会自动应用于窗口中的所有按钮,如下图所示:

有关详细信息,请参阅 样式和模板。

资源

应用程序中的控件应共享相同的外观,其中包括从字体和背景颜色到控件模板、数据模板和样式的任何内容。 可以使用 WPF 对用户界面资源的支持将这些资源封装在单个位置以供重复使用。

以下示例定义由 Button 和 Label共享的常见背景色:

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

x:Class="SDKSample.ResourcesWindow"

Title="Resources Window">

有关详细信息,请参阅 如何定义和引用 WPF 资源。

自定义控件

尽管 WPF 提供了大量自定义支持,但可能会遇到现有 WPF 控件无法满足应用程序或其用户的需求的情况。 当以下情况发生时,可能会发生这种情况:

无法通过自定义现有 WPF 实现的外观来创建所需的用户界面。

你所需的行为不被现有的 WPF 实现支持(或不容易实现)。

但是,此时可以利用三个 WPF 模型之一创建新控件。 每个模型都面向特定方案,并要求自定义控件派生自特定的 WPF 基类。 下面列出了三种模型:

用户控制模型

自定义控件派生自 UserControl,由一个或多个其他控件组成。

控件模型 自定义控件派生自 Control ,用于生成实现,这些实现使用模板将其行为与其外观分开,这与大多数 WPF 控件非常类似。 派生自 Control 使得你可以更自由地创建自定义用户界面(相较用户控件),但它可能需要花费更多精力。

框架元素模型。

自定义控件在通过自定义呈现逻辑(而不是模板)定义其外观时,派生自 FrameworkElement。

有关自定义控件的详细信息,请参阅 控件创作概述。

另请参阅

教程:创建新的 WPF 应用

将 WPF 应用迁移到 .NET

WPF 窗口概述

数据绑定概述

XAML 概述

相关典藏

第 2 部分. 如何修复 Google Play 服务不更新?
365bet直播

第 2 部分. 如何修复 Google Play 服务不更新?

📅 11-12 👁️‍🗨️ 6141
抽奖互动规范
bt365网址

抽奖互动规范

📅 10-06 👁️‍🗨️ 8678
2025年淘宝十大返利APP排行榜:口碑最佳的淘宝返佣软件Top 10揭晓