Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 11.1 WPF与WinForms开发

11.1 WPF与WinForms开发

概述

本节将介绍C#在桌面应用开发中的两大经典框架:Windows Presentation Foundation (WPF) 和 Windows Forms (WinForms)。两者均为.NET平台下的GUI开发技术,但设计理念和适用场景存在显著差异。


WPF (Windows Presentation Foundation)

核心特性

  1. XAML驱动

    • 使用声明式XAML语言分离界面设计与业务逻辑
    • 支持数据绑定、样式和模板的动态更新
    <Button Content="Click Me" Click="Button_Click"/>
    
  2. 矢量图形与硬件加速

    • 基于DirectX渲染,支持高分辨率显示
    • 内置动画系统和视觉效果(如3D变换)
  3. MVVM模式支持

    • 天然适配Model-View-ViewModel架构
    • 通过INotifyPropertyChanged实现数据双向绑定

开发流程

  1. 项目创建
    dotnet new wpf -n MyWpfApp
    
  2. 典型项目结构
    ├── MainWindow.xaml      # 主窗口定义
    ├── ViewModels/          # 视图模型层
    ├── Models/              # 数据模型层
    └── App.xaml             # 应用级资源
    

WinForms (Windows Forms)

核心特性

  1. 拖拽式设计器

    • Visual Studio提供可视化控件布局工具
    • 快速构建传统风格桌面应用
  2. 事件驱动模型

    private void button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show("Button clicked!");
    }
    
  3. 轻量级架构

    • 相比WPF更节省系统资源
    • 兼容旧版Windows系统(需.NET Framework)

开发示例

// 动态创建控件
var btn = new Button() { Text = "Submit" };
btn.Click += (s, e) => { /* 事件处理 */ };
this.Controls.Add(btn);

技术对比

特性WPFWinForms
渲染技术DirectX加速GDI+
布局系统流式布局/自适应绝对坐标定位
学习曲线较陡峭(需掌握XAML/MVVM)平缓
适用场景现代化复杂UI/跨平台潜力快速开发传统应用

迁移与共存方案

  1. WinForms升级路径

    • 通过WindowsFormsHost在WPF中嵌入WinForms控件
    <WindowsFormsHost>
        <wf:Button x:Name="legacyButton"/>
    </WindowsFormsHost>
    
  2. .NET 6+统一支持

    • 两种技术均可在.NET Core/.NET 5+环境中运行
    • WinForms设计器需要Visual Studio 2019 v16.8+

最佳实践建议

  1. 选择依据

    • 优先WPF:需要高清缩放/复杂动画/跨平台(通过Avalonia等框架)
    • 选择WinForms:维护旧系统/快速开发数据录入工具
  2. 性能优化

    • WPF:启用UIVirtualization处理大数据列表
    • WinForms:避免频繁调用Control.Invoke
  3. 现代化改造

    • WinForms应用可逐步迁移至MAUI实现跨平台
    • WPF应用可通过Blazor Hybrid集成Web技术

扩展阅读

  • 微软官方WPF文档
  • WinForms迁移指南
  • WPF与WinForms性能对比白皮书

注意:本节示例代码需要.NET SDK 6.0+和Visual Studio 2022环境支持

Last Updated:: 5/3/25, 11:34 PM