11.1 WPF与WinForms开发
概述
本节将介绍C#在桌面应用开发中的两大经典框架:Windows Presentation Foundation (WPF) 和 Windows Forms (WinForms)。两者均为.NET平台下的GUI开发技术,但设计理念和适用场景存在显著差异。
WPF (Windows Presentation Foundation)
核心特性
XAML驱动
- 使用声明式XAML语言分离界面设计与业务逻辑
- 支持数据绑定、样式和模板的动态更新
<Button Content="Click Me" Click="Button_Click"/>矢量图形与硬件加速
- 基于DirectX渲染,支持高分辨率显示
- 内置动画系统和视觉效果(如3D变换)
MVVM模式支持
- 天然适配Model-View-ViewModel架构
- 通过
INotifyPropertyChanged实现数据双向绑定
开发流程
- 项目创建
dotnet new wpf -n MyWpfApp - 典型项目结构
├── MainWindow.xaml # 主窗口定义 ├── ViewModels/ # 视图模型层 ├── Models/ # 数据模型层 └── App.xaml # 应用级资源
WinForms (Windows Forms)
核心特性
拖拽式设计器
- Visual Studio提供可视化控件布局工具
- 快速构建传统风格桌面应用
事件驱动模型
private void button1_Click(object sender, EventArgs e) { MessageBox.Show("Button clicked!"); }轻量级架构
- 相比WPF更节省系统资源
- 兼容旧版Windows系统(需.NET Framework)
开发示例
// 动态创建控件
var btn = new Button() { Text = "Submit" };
btn.Click += (s, e) => { /* 事件处理 */ };
this.Controls.Add(btn);
技术对比
| 特性 | WPF | WinForms |
|---|---|---|
| 渲染技术 | DirectX加速 | GDI+ |
| 布局系统 | 流式布局/自适应 | 绝对坐标定位 |
| 学习曲线 | 较陡峭(需掌握XAML/MVVM) | 平缓 |
| 适用场景 | 现代化复杂UI/跨平台潜力 | 快速开发传统应用 |
迁移与共存方案
WinForms升级路径
- 通过
WindowsFormsHost在WPF中嵌入WinForms控件
<WindowsFormsHost> <wf:Button x:Name="legacyButton"/> </WindowsFormsHost>- 通过
.NET 6+统一支持
- 两种技术均可在.NET Core/.NET 5+环境中运行
- WinForms设计器需要Visual Studio 2019 v16.8+
最佳实践建议
选择依据
- 优先WPF:需要高清缩放/复杂动画/跨平台(通过Avalonia等框架)
- 选择WinForms:维护旧系统/快速开发数据录入工具
性能优化
- WPF:启用
UIVirtualization处理大数据列表 - WinForms:避免频繁调用
Control.Invoke
- WPF:启用
现代化改造
- WinForms应用可逐步迁移至MAUI实现跨平台
- WPF应用可通过Blazor Hybrid集成Web技术
扩展阅读
注意:本节示例代码需要.NET SDK 6.0+和Visual Studio 2022环境支持
