.NET WinForms / WPF / Blazor 模板详解

说明:下面基于 .NET 6+(.NET 7/8/9 通用) ,区分三大UI框架,从定位、项目模板、目录结构、运行原理、适用场景、优缺点一次性讲清楚,附带模板命令。

一、总览对比

框架 全称 渲染模式 宿主 核心用途
WinForms Windows Forms GDI+ 原生窗口控件 Windows桌面 传统Windows桌面程序,快速开发工具、管理系统
WPF Windows Presentation Foundation DirectX 矢量渲染 Windows桌面 高定制UI、复杂界面、工控/设计类桌面软件
Blazor Blazor Web前端渲染 浏览器 / WebView / 服务端 Web应用;也可做桌面(Blazor WebView)、移动端

⚠️ 重点:

  • WinForms、WPF 只能运行在Windows(.NET Core/.NET5+ 不再支持Linux/macOS原生)
  • Blazor 分两种:Blazor Server(服务端) 、Blazor WebAssembly(WASM,客户端) ;还有 Blazor Hybrid(MAUI/WinForms/WPF内嵌WebView)

二、WinForms 模板详解

1. 创建模板命令(CLI)

arduino 复制代码
# 创建WinForms项目
dotnet new winforms -n MyWinFormsApp
cd MyWinFormsApp
dotnet run

2. 模板项目结构

bash 复制代码
MyWinFormsApp/
├── MyWinFormsApp.csproj       # 项目文件
├── Program.cs                 # 程序入口(.NET6+ 顶级语句模板)
├── Form1.cs                   # 主窗体代码(后台逻辑)
├── Form1.Designer.cs          # 自动生成:控件布局、InitializeComponent()
└── Form1.resx                 # 资源文件:图片、字符串、本地化资源

Program.cs(.NET6+ 新版模板,顶级语句)

csharp 复制代码
namespace MyWinFormsApp;

static class Program
{
    [STAThread]
    static void Main()
    {
        ApplicationConfiguration.Initialize();
        Application.Run(new Form1()); // 启动主窗体
    }
}

[STAThread] 是WinForms强制标记:COM组件、窗口消息循环必须单线程单元。

Form1.cs / Form1.Designer.cs

  • Form1.cs:手写业务逻辑,按钮事件、数据处理
  • Form1.Designer.cs:不要手动修改 ,VS设计器拖拽控件自动生成,里面InitializeComponent()负责实例化所有控件、设置属性、绑定事件。

3. 工作原理

WinForms 封装 Windows API,底层GDI+绘制控件(Button、TextBox、DataGridView等)。

  • 消息循环:Application.Run() 启动Windows消息泵,接收鼠标、键盘消息,分发到控件事件。
  • 控件是原生Windows控件包装,渲染性能稳定,但样式定制能力弱。

4. 优缺点 & 适用场景

✅ 优点:上手最简单、开发速度快、成熟控件库多(DevExpress、Infragistics),老系统迁移友好 ❌ 缺点:UI老旧,自定义界面困难;仅Windows;高DPI适配坑多 适用:内部管理工具、工控上位机、简单桌面工具、维护老项目

三、WPF 模板详解

1. 创建模板命令

arduino 复制代码
dotnet new wpf -n MyWpfApp
cd MyWpfApp
dotnet run

2. 项目结构

bash 复制代码
MyWpfApp/
├── MyWpfApp.csproj
├── App.xaml           # 应用程序全局定义:资源字典、启动窗口、全局事件
├── App.xaml.cs        # App后台代码
├── MainWindow.xaml    # 界面:XAML标记语言(UI描述)
└── MainWindow.xaml.cs # 后台代码(Code-behind)

App.xaml

xml 复制代码
<Application x:Class="MyWpfApp.App"
             xmlns="[http://schemas.microsoft.com/winfx/2006/xaml/presentation](http://schemas.microsoft.com/winfx/2006/xaml/presentation)"
             xmlns:x="[http://schemas.microsoft.com/winfx/2006/xaml](http://schemas.microsoft.com/winfx/2006/xaml)"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <!-- 全局样式、资源 -->
    </Application.Resources>
</Application>

StartupUri 指定启动窗口。

MainWindow.xaml(UI描述)

ini 复制代码
<Window x:Class="MyWpfApp.MainWindow"
        xmlns="[http://schemas.microsoft.com/winfx/2006/xaml/presentation](http://schemas.microsoft.com/winfx/2006/xaml/presentation)"
        xmlns:x="[http://schemas.microsoft.com/winfx/2006/xaml](http://schemas.microsoft.com/winfx/2006/xaml)"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Button Content="Hello WPF"/>
    </Grid>
</Window>
  • XAML:声明式UI,UI与代码分离;支持样式、模板、触发器、动画、矢量绘图。
  • 后台 MainWindow.xaml.cs 处理事件。

3. WPF核心机制

  1. 依赖属性(DependencyProperty) :区别普通属性,支持样式绑定、动画、继承
  2. 数据绑定:UI直接绑定ViewModel(MVVM模式,推荐)
  3. 渲染底层DirectX:矢量渲染,缩放不失真
  4. 控件模板 ControlTemplate:可以完全重写控件外观(按钮可以改成圆形图片)

两种开发模式:

  • Code-behind(模板默认):事件写在xaml.cs,简单快速

  • MVVM(生产推荐):UI和业务完全解耦,Prism、CommunityToolkit.Mvvm

4. 优缺点 & 适用场景

✅ 优点:UI高度自定义、矢量、强大绑定、MVVM架构、动画/图形能力强 ❌ 缺点:学习曲线陡峭;仅Windows;启动速度比WinForms慢;内存占用更高 适用:专业桌面软件、可视化大屏、设计工具、复杂交互客户端

四、Blazor 模板详解(重点区分3种模板)

Blazor 不是桌面框架,是基于.NET的WebUI框架,使用Razor语法(融合HTML+C#)。 3个核心模板:

  1. blazorserver → Blazor Server
  2. blazorwasm → Blazor WebAssembly (WASM)
  3. blazorhybrid → Blazor Hybrid(桌面/移动端,内嵌WebView,可在WinForms/WPF/MAUI中使用)

1. 模板创建命令

csharp 复制代码
# Blazor Server
dotnet new blazorserver -n BlazorServerDemo

# Blazor WebAssembly(独立前端)
dotnet new blazorwasm -n BlazorWasmDemo

# Blazor Hybrid
dotnet new blazorhybrid -n BlazorHybridDemo

2. Blazor Server 模板结构

bash 复制代码
BlazorServerDemo/
├── Pages/                 # Razor页面
│   ├── Index.razor        # 首页
│   ├── Counter.razor
│   └── FetchData.razor
├── Shared/                # 共享组件
│   ├── MainLayout.razor   # 布局
│   ├── NavMenu.razor
├── wwwroot/               # 静态资源:css/js/img
├── App.razor              # 根组件
├── Program.cs             # 服务启动入口
└── BlazorServerDemo.csproj

原理:

  • C#代码运行在服务端
  • 浏览器通过SignalR长连接和服务器通信
  • 用户操作(点击按钮)发送消息到服务端,服务端重新渲染组件DOM diff,把变更传回浏览器 ✅ 优点:前端不用JS、可以直接访问服务器数据库;首屏加载快 ❌ 缺点:依赖网络;并发连接占用服务器资源;离线不可用

3. Blazor WebAssembly (WASM)

目录结构和Blazor Server很像,但运行位置不一样:

  • .NET运行时(wasm格式)下载到浏览器本地
  • C#代码在浏览器中执行,不需要持续长连接
  • 访问后端API获取数据 ✅ 优点:可离线、部署到静态网站;服务压力小 ❌ 缺点:首屏下载大,启动慢;不能直接访问数据库,只能调用API

4. Blazor Hybrid(混合模式)

Blazor Hybrid = WebView + Blazor组件,不是纯Web 可以宿主于 WinForms / WPF / MAUI。

  • 界面依旧写Razor组件,打包成桌面exe
  • 底层是系统WebView2(Edge内核)渲染HTML
  • C#代码运行在原生.NET进程,不是浏览器wasm> > 适合:想用一套Razor界面,打包Windows桌面程序。

Razor组件示例(Counter.razor)

less 复制代码
@page "/counter"

<h1>Counter</h1>
<p>Count: @currentCount</p>
<button @onclick="IncrementCount">Click me</button>

@code {
    private int currentCount = 0;
    private void IncrementCount()
    {
        currentCount++;
    }
}

Razor:HTML + C#混写,@code块写C#逻辑,@onclick绑定事件。

五、三大框架模板关键差异总结

  1. WinForms
  • 模型:事件驱动,拖拽窗体控件

  • UI:GDI+原生控件

  • 代码风格:传统窗体后台代码

  • 模板最简,适合快速工具开发

2.WPF

    • 模型:XAML声明UI + 依赖属性 + 数据绑定,推荐MVVM

    • UI:DirectX矢量渲染,高度自定义

    • 模板自带App+Window XAML分离结构

3.Blazor

    • 模型:组件化Razor,WebUI模型

    • UI:HTML+CSS渲染

    • 模板分Server/WASM/Hybrid,Web优先;Hybrid可以做桌面

六、选型建议

  • 快速做Windows内部工具、旧系统维护 → WinForms
  • 需要炫酷自定义界面、可视化、专业桌面客户端 → WPF
  • Web管理系统,或者一套UI同时网页+桌面端(Hybrid) → Blazor
相关推荐
黄一一9112432 小时前
吾爱大佬开发,离线可用!PDF文件处理工具,本地网页版文件-浏览器里就能搞定,所有操作系统可用
windows·安全·阿里云·pdf·.net·开源软件
慧都小妮子1 天前
MSG 附件太占内存?Aspose.Email for .NET 26.9 延迟加载
c#·.net·aspose·内存优化·延迟加载·aspose.email·附件内存
学以智用1 天前
ASP.NET Core 项目模板详解:Web应用 / Web API / MVC / Razor Pages
.net
IT规划师2 天前
MQTT实战 - 用了8年MQTT,我为什么还要重新系统啃一遍(一)
物联网·.net
邹肖桥2 天前
使用S7.net动态库对西门子Plc S7-1200进行通讯操作
.net
chingho2 天前
GitHub上这10个C#项目,不仅实用,还怪好玩的
c#·github·.net·开源项目
学以智用2 天前
Visual Studio 模板详解
.net
波力海苔夹心脆6754 天前
C# 机器视觉实战:单相机引导机械手精准贴合,从拍照、偏差计算(平移+旋转)到坐标补偿全解
开发语言·经验分享·数码相机·c#·视觉检测·.net
慧都小妮子4 天前
Stimulsoft 2026.4 发布:Markdown 组件、桑基图与 .NET 11 支持
.net·数据可视化·stimulsoft·版本更新·报表控件·桑基图·.net 11