mcpField
D
dotnet-ui-chooser

dotnet-ui-chooser

github.com/wshaddix开发8674 次安装35 周前更新
代码仓库

关于 dotnet-ui-chooser

为 .NET 团队提供 UI 框架选择决策树,覆盖 Web、跨平台和 Windows 框架。通过平台、团队经验、界面复杂度、性能和迁移等因素比较取舍,不涉及各框架的实现细节。

主要功能

  1. 01按目标平台筛选框架
  2. 02比较团队技能适配度
  3. 03评估 UI 与性能需求
  4. 04梳理旧框架迁移选项
  5. 05选择 Blazor 托管模式

适用场景

  1. 01为新 .NET 应用选择 UI 框架
  2. 02比较 Windows 桌面框架
  3. 03评估移动端与 Web 覆盖范围
  4. 04规划旧 UI 应用现代化

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/wshaddix/dotnet-skills --skill dotnet-ui-chooser

安装后在 Claude Code 中输入/dotnet-ui-chooser确认已加载。

详细介绍

dotnet-ui-chooser

面向 .NET 应用的 UI 框架选择决策树。涵盖 Web(Blazor Server、Blazor WebAssembly、Blazor Hybrid)、跨平台(MAUI、Uno Platform、Avalonia)以及仅限 Windows(WinUI 3、WPF、WinForms)框架。围绕五项决策因素提供结构化的权衡分析,帮助团队根据自身约束评估选项。

**范围边界:**此技能负责框架选择决策树和跨框架比较。各框架的深入内容、模式和 API 由对应的框架技能负责。框架之间的迁移指南由 [skill:dotnet-wpf-migration] 负责。

**范围之外:**框架特定的实现模式——请参阅下方列出的各项技能。框架之间的迁移路径——请参阅 [skill:dotnet-wpf-migration]。桌面 UI 测试——请参阅 [skill:dotnet-ui-testing-core]。

交叉引用:[skill:dotnet-blazor-patterns] 介绍 Blazor 托管和渲染模式,[skill:dotnet-maui-development] 介绍 MAUI 模式,[skill:dotnet-uno-platform] 介绍 Uno Platform 模式,[skill:dotnet-winui] 介绍 WinUI 3 模式,[skill:dotnet-wpf-modern] 介绍 .NET 8+ 上的现代 WPF,[skill:dotnet-winforms-basics] 介绍 WinForms 现代化。


决策树

按照此结构化流程,根据项目约束缩小框架选择范围。每个分支都展示权衡,而非给出明确答案——正确选择取决于团队对各项因素的重视程度。

步骤 1:目标平台

这是影响最大的约束。确定应用必须支持哪些平台。

Target platforms?
|
+-- Web browser only
|   --> Blazor (Server, WebAssembly, or Auto)
|       See "Blazor Hosting Model Selection" below
|
+-- Windows only
|   --> WinUI 3, WPF, or WinForms
|       See "Windows Framework Selection" below
|
+-- Mobile (iOS / Android)
|   +-- Also need desktop?
|   |   +-- Yes --> MAUI or Uno Platform
|   |   +-- No  --> MAUI or Uno Platform
|   |
|   +-- Also need web?
|       +-- Yes --> Uno Platform (WASM target) or Blazor Hybrid in MAUI
|       +-- No  --> MAUI or Uno Platform
|
+-- All platforms (web + mobile + desktop)
|   --> Uno Platform (broadest reach)
|       or Blazor Hybrid in MAUI (web UI, native shell)
|
+-- Desktop cross-platform (Windows + macOS + Linux)
    --> Uno Platform or Avalonia
        MAUI supports macOS/Windows but not Linux
步骤 2:团队经验

根据团队现有技能选择框架,以缩短上手时间。

团队优势高度匹配中度匹配学习曲线较陡
WPF / WinUI XAMLWPF、WinUI 3Uno Platform(WinUI XAML 界面)Blazor(Razor 语法)
Web(HTML/CSS/JS)BlazorUno Platform(WASM 目标)WPF、WinUI(XAML)
Xamarin.FormsMAUI(直接后继框架)Uno PlatformBlazor、WPF
C#,但没有 UI 框架经验WinForms(最简单)、BlazorMAUIWPF、WinUI(XAML 学习曲线)
React / AngularBlazor WebAssembly(SPA 模型)Uno Platform(WASM)WPF、WinUI
步骤 3:UI 复杂度

根据 UI 需求选择与之匹配的框架渲染能力。

UI 需求最佳匹配也可考虑
丰富的原生 Windows UI(自定义控件、动画)WinUI 3、WPFUno Platform(WinUI 界面)
Web 风格布局(响应式、基于 CSS)BlazorUno Platform(Skia 渲染)
简单的数据录入表单、内部工具WinFormsBlazor(Static SSR)、WPF
像素级精确的跨平台 UIUno Platform(Skia 渲染)Avalonia
各操作系统均采用原生外观MAUI(原生控件)Uno Platform(原生模式)
在桌面/移动应用中嵌入 Web 内容MAUI 中的 Blazor HybridWPF/WinForms 中的 Blazor Hybrid
步骤 4:性能需求

框架的渲染架构会影响其性能特征。

性能因素WinUI 3WPFWinFormsBlazor ServerBlazor WASMMAUIUno Platform
启动时间快快快快(服务端)慢(下载)中等中等
渲染DirectX(原生)DirectX(托管)GDI+服务端 HTML浏览器 DOM平台原生Skia 或原生
AOT 支持N/A(Windows)N/A(Windows)N/A(Windows)N/A(服务端)支持(.NET 8+)支持(iOS 上必需)支持(WASM)
GPU 加速支持支持有限N/A浏览器 GPU平台 GPUSkia GPU
每位用户的内存占用仅本地仅本地仅本地服务端会话浏览器沙箱仅本地仅本地
支持离线支持支持支持不支持支持支持支持(原生目标)
步骤 5:迁移路径

如果要对现有应用进行现代化改造,源框架会限制可行的目标框架。

当前框架自然的目标框架替代目标框架决策因素
UWPWinUI 3Uno Platform仅限 Windows:WinUI 3。需要跨平台:Uno Platform。
Xamarin.FormsMAUIUno Platform直接的 API 后继框架:MAUI。平台覆盖范围更广:Uno Platform。
WPF (.NET Framework)WPF on .NET 8+WinUI 3 或 Uno Platform风险最低:WPF .NET 8+。现代 UI:WinUI 3。跨平台:Uno Platform。
WinForms (.NET Framework)WinForms on .NET 8+Blazor 或 WPF风险最低:WinForms .NET 8+。更好的 UI:WPF。通过 Web 交付:Blazor。
ASP.NET MVC / Razor PagesBlazor (Static SSR)保留 Razor Pages需要交互:Blazor。内容为主:Razor Pages 仍然适用。
React / Angular SPABlazor WebAssembly保留现有 SPA仅使用 .NET 的团队:Blazor。现有 JS 团队:保留 SPA。

Blazor 托管模型选择

如果目标是 Blazor,请根据交互需求、部署限制和规模选择托管模型。

考量因素Static SSRInteractiveServerInteractiveWebAssemblyInteractiveAutoBlazor Hybrid
交互性仅表单完整完整(下载后)完整完整(原生)
是否需要服务端是(渲染)是(持久电路)仅静态文件主机是(初始阶段),之后为静态否
离线使用否否是部分支持是
可扩展性高受电路限制高高(WASM 加载后)不适用(本地运行)
首次绘制快快慢(WASM 下载)快(先使用 Server)即时
SEO支持预渲染预渲染预渲染不适用
最适合内容站点、简单表单仪表板、LOB 应用公共应用、离线 PWA兼得两者优势带 Web UI 的桌面端/移动端

有关详细的 Blazor 模式,请参阅 [skill:dotnet-blazor-patterns]。


Windows 框架选择

如果应用仅面向 Windows,请根据 UI 丰富度、团队专业知识和现代化目标进行选择。

对比表
考量因素WinUI 3WPF (.NET 8+)WinForms (.NET 8+)
UI 范式现代 XAML、Fluent Design经典 XAML,可选 Fluent(.NET 9+)由设计器驱动,支持拖放
渲染DirectX (Windows App SDK)DirectX (WPF layer)GDI+
MVVM 支持CommunityToolkit.MvvmCommunityToolkit.Mvvm,成熟的生态系统可行,但不符合惯用做法
DI / Host builder支持支持支持(.NET 8+)
高 DPI原生支持在 .NET 8+ 中有所改进PerMonitorV2(需要配置)
深色模式原生 FluentApplication.ThemeMode(.NET 9+)实验性(.NET 9+)
触控 / 手写笔完整支持基本支持有限支持
学习曲线中等(XAML)中等(XAML)低
成熟度较新(2021+)非常成熟(2006+)非常成熟(2002+)
UWP 迁移路径直接间接(XAML 差异)不适用
何时选择各框架

WinUI 3 -- 最适合需要现代 Fluent Design、触控/手写笔输入和最新 Windows 集成功能(小组件、通知、Mica)的新 Windows 原生应用。需要 Windows 10 2004+。请参阅 [skill:dotnet-winui]。

WPF on .NET 8+ -- 最适合具备现有 WPF 专业知识的团队、需要丰富 WPF 控件生态系统的应用,或从 WPF on .NET Framework 迁移的项目。.NET 9+ 提供 Fluent 主题。请参阅 [skill:dotnet-wpf-modern]。

WinForms on .NET 8+ -- 最适合快速原型开发、内部工具、简单 CRUD 表单,以及重视开发速度胜过 UI 精致度的 Windows 实用工具。学习曲线最简单。请参阅 [skill:dotnet-winforms-basics]。


跨平台框架选择

如果应用必须在多个平台上运行,请比较覆盖范围、渲染模型和 API 表面。

对比表
关注点MAUIUno PlatformAvalonia
目标平台iOS、Android、macOS、Windows、TizeniOS、Android、macOS、Windows、Linux、Web(WASM)iOS、Android、macOS、Windows、Linux、Web(WASM)
UI 渲染平台原生控件Skia(像素级精准)或平台原生Skia(像素级精准)
XAML 方言MAUI XAML(Xamarin.Forms 的后继者)WinUI XAML 界面Avalonia XAML(受 WPF 启发)
热重载XAML + C# 热重载XAML + C# 热重载XAML 热重载
维护方Microsoft(第一方)Uno Platform(开源,提供商业支持)社区(开源,提供商业支持)
生态系统NuGet + MAUI Community ToolkitNuGet + Uno Toolkit + Uno ExtensionsNuGet + Avalonia 社区
Blazor Hybrid内置(BlazorWebView)支持非内置
Linux 桌面不支持支持(Skia + GTK/Framebuffer)支持
Web(WASM)不支持支持支持(浏览器)
迁移来源Xamarin.Forms(直接迁移)UWP(直接迁移至 WinUI 界面)WPF(XAML 相似)
如何选择

MAUI —— 最适合以移动端为先、面向 iOS 和 Android,并可选支持 Windows/macOS 的应用。平台原生控件可提供与操作系统一致的外观和体验。可从 Xamarin.Forms 直接迁移。请参阅 [skill:dotnet-maui-development]。

Uno Platform —— 最适合需要覆盖最广平台(包括 Linux 和 Web),并使用单一 XAML 代码库的应用。它采用 WinUI XAML API 界面,因此对于希望跨平台开发的 UWP 或 WinUI 团队而言,是自然的选择。请参阅 [skill:dotnet-uno-platform]。

Avalonia —— 由社区驱动的跨平台框架,采用受 WPF 启发的 XAML,且对 Linux 桌面支持出色。如果偏好 WPF 风格的开发,并且可以接受由社区维护工具,可考虑选用。此插件并不拥有该项目——详情请参阅 Avalonia 文档。


权衡总结矩阵

汇总各框架的情况,方便快速参考。

框架平台渲染XAML离线AOT最适用于
Blazor ServerWeb服务端 HTMLRazor否不适用LOB 应用、仪表板
Blazor WASMWeb浏览器 DOMRazor是是公共 Web 应用、PWA
Blazor Hybrid移动端 + 桌面WebViewRazor是部分支持在原生外壳中使用 Web UI
MAUI移动端 + 桌面原生MAUI XAML是iOS 必需以移动端为先的应用
Uno Platform所有平台Skia / 原生WinUI XAML是WASM覆盖最广的平台
Avalonia桌面 + 移动端SkiaAvalonia XAML是部分支持Linux 桌面、WPF 团队
WinUI 3WindowsDirectXWinUI XAML是不适用现代 Windows 应用
WPFWindowsDirectXWPF XAML是不适用成熟的 Windows 应用
WinFormsWindowsGDI+无(设计器)是不适用内部工具、原型

常见决策场景

针对常见情况的结构化指导。每种场景都会介绍各种权衡,而非给出单一答案。

场景:新的内部业务应用(仅供 Windows 用户使用)

  • 快速交付,界面简洁:WinForms
  • 丰富的界面和数据可视化:WPF 或 WinUI 3
  • 优先采用 Web 部署:Blazor Server (InteractiveServer)
  • 未来可能需要跨平台支持:Uno Platform 或 Blazor

场景:面向客户的移动应用

  • iOS + Android,原生外观:MAUI
  • iOS + Android + Web:Uno Platform 或 MAUI 中的 Blazor Hybrid
  • 已有 Web 团队:MAUI 中的 Blazor Hybrid

场景:现代化改造旧版 .NET Framework WPF 应用

  • 尽量减少改动:将 WPF 迁移到 .NET 8+(使用相同的 XAML,采用现代运行时)
  • 更新为现代界面(仅限 Windows):迁移到 WinUI 3
  • 需要跨平台:迁移到 Uno Platform(WinUI XAML 界面)
  • 需要通过 Web 交付:使用 Blazor 重写关键流程

场景:面向公众的 Web 应用

  • 内容为主,注重 SEO:Blazor Static SSR
  • 交互式 SPA:Blazor WebAssembly 或 InteractiveAuto
  • 实时仪表板:Blazor Server (InteractiveServer)

场景:面向 Windows、macOS 和 Linux 的桌面应用

  • 像素级精准的界面:Uno Platform (Skia) 或 Avalonia
  • MAUI 不支持 Linux 桌面

Agent 注意事项

  1. 不要推荐某个框架是“最佳选择”。 每个框架都有权衡。应介绍各方案及其权衡,并让团队根据自身限制做出决定。
  2. 不要为新的面向客户的应用推荐 WinForms。 WinForms 适用于内部工具和原型,但缺少面向客户产品所需的现代界面功能。
  3. 不要混淆 MAUI 和 Uno Platform 的目标平台覆盖范围。 MAUI 不支持 Linux 或 Web (WASM),而 Uno Platform 支持。推荐前请确认所需的平台列表。
  4. 不要默认认为 Blazor WebAssembly 可离线运行。 WASM 在浏览器中运行,但离线支持需要显式配置 PWA(服务工作线程、缓存策略)。
  5. 不要把 Avalonia 说成由 Microsoft 支持的框架。 Avalonia 由社区维护。它提供商业支持选项,但不是 Microsoft 的产品。
  6. 不要建议将 UWP 直接迁移到 WPF。 UWP 的自然迁移目标是 WinUI 3(使用相同的 XAML API 界面)。WPF 使用不同的 XAML 方言。
  7. 不要忽略 Blazor Hybrid 作为跨平台选项。 MAUI 中的 Blazor Hybrid 能让 Web UI 技能应用于移动和桌面应用。它是学习原生 XAML 的可行替代方案。
  8. 不要认为 WPF 已经过时。 .NET 8+ 上的 WPF 仍在积极维护,并持续推出新功能(.NET 9+ 中的 Fluent 主题、性能改进)。对于 Windows 桌面,它仍是可靠的选择。

参考资料

评论

支持 Markdown