# WinUI 发展简史:从 WPF 到 WinUI 3 的三代演进
> 微软 Windows UI 技术的二十年进化之路,从托管代码到原生独立,从系统绑定到跨平台开放。
---
## 一、三代演进概览
Windows UI 技术的发展历程,可以清晰地划分为三个时代。每一代都代表了当时技术环境下的最优解,也反映了微软对开发者生态的战略思考。
```
┌─────────────────────────────────────────────────────────────┐
│ UI 框架演进史 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 第一代:WPF (2006) │
│ ├── 托管代码 (.NET Framework) │
│ ├── DirectX 9 渲染 │
│ └── 仅支持 Windows Desktop │
│ │
│ 第二代:UWP XAML (2015) │
│ ├── 原生 C++ 核心 │
│ ├── XAML 引擎内置 Windows OS │
│ └── 沙盒环境,仅支持 UWP 应用 │
│ │
│ 第三代:WinUI 3 (2020) │
│ ├── 原生 C++ 核心 │
│ ├── 完全独立于 OS 发布周期 │
│ ├── 支持 Desktop + UWP 多种应用模型 │
│ └── DirectX 12 渲染 │
│ │
└─────────────────────────────────────────────────────────────┘
```
---
## 二、第一代:WPF(2006)
### 2.1 时代背景
2006年,微软推出了 Windows Vista,同时也带来了 **WPF(Windows Presentation Foundation)**。这是 .NET Framework 3.0 的核心组件之一,标志着微软从传统的 Win32 GUI 开发向托管代码时代的转变。
### 2.2 技术特点
| 特性 | 说明 |
|------|------|
| **编程模型** | 托管代码(C# / VB.NET) |
| **渲染引擎** | DirectX 9 |
| **声明式 UI** | 引入 XAML(eXtensible Application Markup Language) |
| **数据绑定** | 强大的 MVVM 支持 |
| **样式系统** | 控件模板、数据模板、资源字典 |
### 2.3 历史意义
WPF 的革命性在于它首次将 **声明式 UI** 引入 Windows 开发。开发者可以用 XAML 描述界面,用 C# 编写逻辑,实现了 UI 与业务的分离。这种设计思想影响了后来所有的微软 UI 框架。
然而,WPF 也有其局限性:
- 依赖 .NET Framework,安装包体积大
- 仅支持 Windows Desktop
- 性能受限于托管代码和 DirectX 9
---
## 三、第二代:UWP XAML(2015)
### 3.1 时代背景
2015年,微软推出了 Windows 10,同时带来了 **UWP(Universal Windows Platform)**。这是微软"一次编写,处处运行"愿景的首次大规模实践,目标是在所有 Windows 设备(PC、平板、手机、Xbox、HoloLens)上运行统一的应用。
### 3.2 技术特点
| 特性 | 说明 |
|------|------|
| **编程模型** | 原生 C++ 核心 + 多语言投影(C#、C++、JS) |
| **渲染引擎** | 原生 Composition API |
| **分发方式** | Windows Store |
| **运行环境** | 沙盒化容器(AppContainer) |
| **API 设计** | 现代化 WinRT API |
### 3.3 与 WPF 的核心差异
**架构层面**:
- WPF 是托管代码在 .NET Framework 上运行
- UWP 是原生 C++ 核心,通过语言投影支持 C#
**部署层面**:
- WPF 是传统安装包(MSI / ClickOnce)
- UWP 是 Store 应用,沙盒隔离,自动更新
**渲染层面**:
- WPF 使用 DirectX 9 通过托管包装器
- UWP 使用原生 DirectComposition,性能更优
### 3.4 局限性
UWP 虽然技术先进,但也面临挑战:
- **系统绑定**:XAML 引擎是 Windows 10 的一部分,新功能必须等待系统更新
- **生态隔离**:UWP 应用无法与 Win32 桌面应用深度集成
- **开发者流失**:严格的 Store 审核和沙盒限制让部分开发者望而却步
---
## 四、第三代:WinUI 3(2020)
### 4.1 革命性转变
2020年,微软推出了 **WinUI 3**,这是 Windows UI 技术的第三代演进。WinUI 3 最革命性的变化是 **将整个 UI 栈从 Windows 操作系统中解耦出来**。
在 UWP 时代,XAML 引擎是 Windows 10 的一部分,应用必须依赖特定版本的 Windows。而 **WinUI 3 通过 Windows App SDK 将整个 UI 栈打包为 NuGet 库**,实现了与 OS 发布周期的完全独立。
### 4.2 技术架构
```
┌─────────────────────────────────────────────────────────────┐
│ 应用层 (Your App) │
│ XAML + C# / C++ 业务代码 │
├─────────────────────────────────────────────────────────────┤
│ 框架层 (Framework) │
│ Microsoft.UI.Xaml.* │
│ ├── Controls (Button, TextBox, ListView...) │
│ ├── Data Binding Engine │
│ ├── Dependency Property System │
│ └── Visual State Manager │
├─────────────────────────────────────────────────────────────┤
│ 视觉层 (Visual Layer) │
│ Microsoft.UI.Composition │
│ ├── Compositor (组合器) │
│ ├── Visual Tree (视觉树) │
│ ├── Effects System (效果系统) │
│ └── Animation System (动画系统) │
├─────────────────────────────────────────────────────────────┤
│ 图形层 (Graphics) │
│ DirectX 12 / DirectComposition │
│ ├── GPU 硬件加速 │
│ └── 60 FPS 渲染管线 │
└─────────────────────────────────────────────────────────────┘
```
### 4.3 核心特性
| 特性 | WinUI 3 | UWP | WPF |
|------|---------|-----|-----|
| **系统依赖** | ❌ 独立 NuGet 包 | ✅ 内置系统 | ✅ 依赖 .NET Framework |
| **渲染 API** | DirectX 12 | DirectComposition | DirectX 9 |
| **桌面支持** | ✅ Win32 + UWP | ❌ 仅 UWP | ✅ 仅 Win32 |
| **向后兼容** | ✅ Windows 10 1809+ | ⚠️ 版本绑定 | ⚠️ .NET Framework 依赖 |
| **更新频率** | 每月更新 | 半年 / 随系统 | 已停止 |
### 4.4 依赖属性系统:XAML 的灵魂
WinUI 3 继承了 XAML 的核心创新——**依赖属性(Dependency Property)**。这个多层级值解析系统使得样式、模板、数据绑定和动画能够无缝协作。
```
┌─────────────────────────────────────────────────────────────┐
│ 依赖属性值优先级 │
│ (从高到低) │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. 动画值 (Animated Value) │
│ └── 当前正在执行的动画 │
│ │
│ 2. 本地值 (Local Value) │
│ └── 直接赋值或 XAML 属性设置 │
│ │
│ 3. 模板值 (Templated Value) │
│ └── ControlTemplate / DataTemplate 中的绑定 │
│ │
│ 4. 样式值 (Style Setter) │
│ └── Style 中的 Setter 设置 │
│ │
│ 5. 默认值 (Default Value) │
│ └── PropertyMetadata 中定义的默认值 │
│ │
└─────────────────────────────────────────────────────────────┘
```
### 4.5 Fluent Design System
WinUI 3 是 **Fluent Design System** 的官方实现载体,提供了:
- **Acrylic** 和 **Mica** 材质效果
- **Reveal** 高光效果
- **Elevation** 阴影系统
- 圆角、动画、深度等现代设计语言
---
## 五、WinUI 3 与跨平台生态
### 5.1 Uno Platform:WinUI 的跨平台延伸
WinUI 3 的 API 设计如此优秀,以至于催生了 **Uno Platform**——一个将 WinUI 3 完整移植到 iOS、Android、WebAssembly、macOS 和 Linux 的开源项目。
```
┌─────────────────────────────────────────────────────────────┐
│ 跨平台框架的两种策略 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 策略 A:抽象层 (MAUI / Xamarin.Forms) │
│ ┌─────────────┐ │
│ │ 抽象 API 层 │ ← 需要设计一套"最小公倍数"API │
│ └──────┬──────┘ │
│ │ │
│ ┌────┴────┬─────────┐ │
│ ▼ ▼ ▼ │
│ ┌─────┐ ┌─────┐ ┌─────┐ │
│ │ iOS │ │Andrd│ │ Win │ ← 各平台原生控件实现 │
│ └─────┘ └─────┘ └─────┘ │
│ │
├─────────────────────────────────────────────────────────────┤
│ │
│ 策略 B:API 兼容 (Uno Platform) │
│ ┌─────────────┐ │
│ │ WinUI 3 API│ ← 完整复刻微软官方 API │
│ └──────┬──────┘ │
│ │ │
│ ┌────┴────┬─────────┐ │
│ ▼ ▼ ▼ │
│ ┌─────┐ ┌─────┐ ┌─────┐ │
│ │ iOS │ │Andrd│ │ Win │ ← 原生渲染 + Skia 自绘 │
│ └─────┘ └─────┘ └─────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
```
### 5.2 WinUI 3 vs .NET MAUI
| 维度 | WinUI 3 | .NET MAUI |
|------|---------|-----------|
| **定位** | Windows 原生 UI | 跨平台(iOS / Android / Win / macOS)|
| **渲染策略** | 自绘 + 原生 | 原生控件包装 |
| **Linux 支持** | ❌ 不支持 | ❌ 不支持 |
| **WebAssembly** | ❌ 不支持 | ⚠️ Blazor Hybrid |
| **API 来源** | Windows App SDK | 抽象层设计 |
| **代码共享** | 通过 Uno Platform | 原生支持 |
---
## 六、总结与展望
### 6.1 三代框架的演进逻辑
| 时代 | 核心诉求 | 技术选择 | 限制因素 |
|------|----------|----------|----------|
| WPF (2006) | 托管代码生产力 | .NET Framework | 系统依赖、性能 |
| UWP (2015) | 统一平台、原生性能 | 系统内置、沙盒 | 生态隔离、更新滞后 |
| WinUI 3 (2020) | 解耦、独立、现代化 | NuGet 包、DX12 | 仅 Windows |
### 6.2 开发者选择建议
- **新项目**:优先选择 WinUI 3 + Windows App SDK
- **跨平台需求**:考虑 Uno Platform(WinUI API)或 .NET MAUI(原生感)
- **维护旧项目**:WPF 仍可使用,但新功能有限
- **UWP 项目**:建议迁移到 WinUI 3,获取持续更新
### 6.3 未来展望
WinUI 3 代表了微软 UI 技术的现代化方向:
- ✅ 与系统解耦,独立更新
- ✅ 原生性能,DirectX 12 渲染
- ✅ 统一 Desktop 和 UWP 应用模型
- ✅ 开源生态(Uno Platform 等)
随着 Windows 11 的普及和 Windows App SDK 的成熟,WinUI 3 正在成为 Windows 桌面开发的事实标准。
---
## 参考资源
1. [Windows App SDK 官方文档](https://docs.microsoft.com/windows/apps/windows-app-sdk/)
2. [WinUI 3 GitHub 仓库](https://github.com/microsoft/microsoft-ui-xaml)
3. [Uno Platform 文档](https://platform.uno/docs/)
4. [Fluent Design System](https://www.microsoft.com/design/fluent/)
---
> **关于作者**:本文整理自智柴论坛 Uno Platform 系列教程中的 WinUI 相关内容,结合官方文档进行补充。
登录后可参与表态
讨论回复
0 条回复还没有人回复,快来发表你的看法吧!