首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用 .NET 构建 UI 界面的各种方式

使用 .NET 构建 UI 界面的各种方式

作者头像
jgrass
发布于 2024-12-25 10:44:35
发布于 2024-12-25 10:44:35
6580
举报
文章被收录于专栏:蔻丁杂记蔻丁杂记

微软搞出了很多构建 UI 程序的框架,如 WinForms WPF WinUI MAUI,他们之间的简单对比可以看如下这篇官方文档

Overview of framework options - Windows apps | Microsoft Learn

本文主要是记录一下在搜索相关问题时,对了解到的内容进行的简要记录,不一定准确,如果发现错误,请留言补充。

1 .NET Framework 时代的 WinForms 与 WPF

Windows Forms 是直接依赖 GDI+ 和 Win32,可以理解为是对 Win32 和 GDI+ 的封装。

Windows Presentation Foundation 依赖的是 DirectX,

可以从这里了解到更详细的 WPF 的架构说明:Architecture - WPF .NET Framework

2 .NET Core 时代的 WinForms 与 WPF

dotnet/winforms: Windows Forms is a .NET UI framework for building Windows desktop applications.

dotnet/wpf: WPF is a .NET Core UI framework for building Windows desktop applications.

为什么要将 WinForms 和 WPF 迁移到 .NET Core 下?毕竟就算迁移了,还是只能在 Windows 下使用,不能跨平台。

Differences between .NET Framework and .NET - WPF

这篇文章说了三个形式上的变更:

1 project 风格更优雅了(从 csproj 文件能看出来)

2 nuget 包的管理方式变了

3 CAS 被移除了

迁移到 .NET Core 之后,或许是丢掉了一些不必考虑的旧的兼容处理,并且可以全面拥抱 .NET Core 的运行时。好处有这些:

1 可以使用 side-by-side / self-contained 的部署方式,也就是用户电脑上不一定要安装相应的 .NET Core 版本,应用程序可以自己带上所有的框架依赖

2 可以用到最新的 C# 特性和运行时 API

3 得益于 .NET Core 基础库本身的性能优化,一些操作会获得更好的性能

4 可以使用 dotnet cli 来完成很多 devops 相关的工作

当然,WinForms 还是依赖 GDI+ 和 Win32, WPF 也还是依赖 DX,这点本身并没有改变,所以,他们并不能夸平台。

还有就是,.NET Framework 最新版本是 4.8.1,而且不会有大的版本更新了,但是 .NET Core 一直在更新。.NET5 .NET6 .NET7 .NET8,还在持续更新中。

如果没有什么特殊的理由,应该直接使用 .NET Core 来构建 WinForms 和 WPF 程序。

PS .NET Core 后面就不叫 .NET Core XXX 了,直接就是 .NET XXX

这里可以看到一些 WPF 的更新:What’s new in WPF for .NET 8 - WPF .NET | Microsoft Learn

也可以将旧的程序升级到 .NET Core

Upgrade a WPF app to .NET 8 - WPF .NET | Microsoft Learn

3 UWP (Universal Windows Platform)

UWP Documentation - UWP app developer | Microsoft Learn

Reference for Universal Windows Platform (UWP) apps - Windows UWP applications | Microsoft Learn

UWP 随 Win8 推出,从名称(通用 Windows 平台)可以看出,目标是写一套代码开发的 APP,可以在多个 Windows 平台上运行,如 PC,WinPhone,HoloLens,Xbox,IoT 等。

但 UWP 依赖的 Windows Runtime (WinRT) 是直接集成到操作系统中的,如果用户的操作系统没有更新,开发者就无法使用最新的 API,这是一个巨大的依赖问题。

所以就有了 WinUI 2.x 来解决这个问题,在开发 UWP 应用时,可以引用 WinUI 2.x 的 nuget 包,来使用更新的控件等内容,但 UI Framework 部分仍然是集成在操作系统中的,也就是与操作系统仍然是强绑定的。

所以就有了 WinUI 3,类似 WPF 等,WinUI3 本身包含完整了 Framework 和控件库,不需要操作系统提供额外的太多特殊支持,是一个独立的 UI 框架。

UWP 一个技术上成功但商业上失败的框架之死;一个现代的操作系统究竟应该提供什么? - Anduin Xue

UWP 有个核心特征是,UWP 是在沙箱中运行的,具有良好的安全性,但灵活性就收到了很大的限制。

注意,UWP 本身并不是一个 UI 框架,是一个 App Model,与之对应是 Win32 App Model。UI 部分由 WinUI 提供,可以理解为,WinUI1 就是最初 UWP 体系内,提供 UI 的组件。

4 WinUI 1 2 3

WinUI1 就是 UWP 的一部分,并不独立存在。(这是个人理解,不一定准确,也可以将 WPF 称为 WinUI1)

WinUI2 是为 UWP 提供的独立 nuget 包,为了解决 UWP 控件的操作系统依赖问题。(但 UI 框架层仍集成在操作系统中)

WinUI3 是完全独立的 UI 库(包括控件库与UI框架),可以用在 WinForms 和 WPF 中

comparison-of-winui-3-and-winui-2

5 WinUI 3

microsoft/microsoft-ui-xaml: Windows UI Library: the latest Windows 10 native controls and Fluent styles for your applications

WinUI 3 - Windows apps | Microsoft Learn

可以在 Windows 应用商店下载 WinUI3 Gallery 来浏览 WinUI3 当前支持的控件。

WinUI3 有 winui3 in uwp 和 winui3 in desktop 的区别,前者运行在 UWP 运行时中,是一个沙箱程序,文件、网络等相关的交互,都需要声明权限,并需要用户同意,好处是 UWP 有生命周期管理,在应用最小化等场景下,程序可以不运行,以节省能量消耗。 后者与 WPF 等类似,就是通常的 Windows 桌面程序。

WinUI3 可以通过 XAML IsLands 的方式,嵌入到 WPF/WinForms 中。

在许多情况下,可以使用 XAML Islands 将现代化 XAML 控件添加到应用。 但是,如果需要创建超越内置控件功能范围的自定义体验,可以访问视觉层 API。 Modernize your desktop app using the Visual layer - Windows apps | Microsoft Learn

Can I use winUI 3 class library to WPF ? - Microsoft Q&A

甚至,如果你使用 C++ 进行 Win32/MFC 开发,也可以将 WinUI3 嵌入其中,构建更现代的应用。(但或许有什么坑?不确定是否真的会有正式项目会这么做)

6 Windows App SDK

microsoft/WindowsAppSDK: The Windows App SDK empowers all Windows desktop apps with modern Windows UI, APIs, and platform features, including back-compat support, shipped via NuGet.

Build desktop Windows apps with the Windows App SDK - Windows apps | Microsoft Learn

Windows App SDK 通过 nuget 包提供,但并非完全不依赖操作系统,最低要求是 Win10 1809.

Windows App SDK and supported Windows releases. - Windows apps | Microsoft Learn

GPT: Windows App SDK(以前称为 Project Reunion)的设计目标之一是提供一个统一的开发平台,使得开发者可以更轻松地创建跨不同 Windows 版本和设备的应用程序。然而,尽管 Windows App SDK 旨在减少对特定操作系统版本的依赖,它仍然在很大程度上依赖于 Windows Runtime APIs(WinRT)

WinUI3 是作为 Windows App SDK 的一部分,同样有最低系统版本的要求。

7 MAUI

What is .NET MAUI? - .NET MAUI | Microsoft Learn

.NET Multi-platform App UI documentation - .NET MAUI | Microsoft Learn

dotnet/maui: .NET MAUI is the .NET Multi-platform App UI, a framework for building native device applications spanning mobile, tablet, and desktop.

MAUI 源自 Xamarin,是跨平台的 UI 框架,在 PC 平台上,使用的就是 WinUI3。

.NET for Android 就是 Xamarin.Android, .NET for iOS 就是 Xamarin.iOS, .NET MAUI 就是 Xamarin.Forms, 微软改名部再立大功

目前可能还不是使用 MAUI 实现跨平台应用(搜到的几个评价都一般),尤其是复杂应用的好时机,让子弹再飞一会儿吧。

8 Uno Platform

Uno Platform 是实现跨平台 UI 的另一个方案,基于 WinUI3,把 WinUI3 带到其它平台,甚至是通过 WebAssembly,可以构建 Web UI。

Uno Platform: Create Beautiful .NET apps faster

9 Avalonia UI

Avalonia UI

AvaloniaUI/Avalonia: Develop Desktop, Embedded, Mobile and WebAssembly apps with C# and XAML. The most popular .NET UI client technology

Avalonia 目前更专注桌面端的跨平台方案,源自 WPF。从官网说明来看,也有向移动端发展的想法。

Avalonia XPF currently supports Windows, macOS and Linux (desktop and embedded). WebAssembly, iOS and Android support is coming in 2024.

然后 Avalonia 还有一个 XPF 方案,可以低成本迁移 WPF 程序到 macOS 和 Linux 端,不过是收费的。

Avalonia UI - XPF

10 扩展

.NET 之前的 UI 框架

在 .NET 之前,有 MFC 这个 C++ UI 框架,但其实,这段远古的历史还要复杂得多,而且命令也非常混乱,不愧是微软改名部。

详细阅读:Windows编程革命简史 | 酷 壳 - CoolShell

其它 .NET 内的框架

除了 UI 相关的框架,.NET 中比较出名的还有服务端的 asp.net,对应 .NET Core 的版本就是 asp.net core,对应新项目而言,当然是直接使用 asp.net core。

一些对比与区别,见如下的文档

Choose between .NET and .NET Framework for server apps

Choose between ASP.NET 4.x and ASP.NET Core

参考文献

本文大部分内容,根据下面这个视频整理,可能有过时或者错误的地方,欢迎留言讨论。 WinUI 3.0 - Building Modern Desktop Apps with .NET and C# - YouTube

其它参考:

WinUI vs WPF, WinForms, UWP, and MFC | ComponentOne

目前 Window 平台主推的 UI 技术到底是啥? - V2EX Windows 11出世UWP却惨遭弃用!Windows 软件还会翻新吗-51CTO.COM

UWP 一个技术上成功但商业上失败的框架之死;一个现代的操作系统究竟应该提供什么? - Anduin Xue

What is the difference between MAUI and WinUI? · dotnet/maui · Discussion #47

WinUI or .NET MAUI? : r/csharp

原文链接: https://cloud.tencent.com/developer/article/2481595

本作品采用 「署名 4.0 国际」 许可协议进行许可,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024年7月1日 |,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
WinUI 3 试玩报告
在微软 Build 2020 开发者大会上,WinUI 团队宣布可公开预览的 WinUI 3 Preview 1,它让开发人员可以在 Win32 中使用 WinUI。WinUI 3 Preview 1 包含新的 VisualStudio 项目模板,可以创建面向 .NET 5 的 C# 和 C++/Win32 项目。从技术上讲,WinUI 3 将 UWP 的 XAML、Composition 和 Input 层分离,并通过NuGet将它们独立分发给针对Windows 10 版本 1803 及更高版本的 Win32 应用。
dino.c
2020/06/08
3.4K0
WinUI 3 试玩报告
官宣!微软跨平台 UI 框架 .NET MAUI 6 正式发布!
欢迎使用 .NET 多平台应用程序 UI。此版本标志着我们在统一 .NET 平台的多年旅程中的新里程碑。现在,您和超过 500 万其他 .NET 开发人员拥有面向 Android、iOS、macOS 、Windows和Linux(由Github开源社区支持) 的一流跨平台 UI 技术栈,以补充 .NET 工具链 (SDK) 和基础类库 (BCL)。您可以使用 .NET 构建任何东西。
JusterZhu
2022/12/07
4.6K0
官宣!微软跨平台 UI 框架 .NET MAUI 6 正式发布!
.NET跨平台框架选择之一 - Avalonia UI
Avalonia UI文档教程:https://docs.avaloniaui.net/docs/getting-started
沙漠尽头的狼
2022/11/25
5.1K0
.NET跨平台框架选择之一 - Avalonia UI
使用.NET Core 构建现代化的桌面应用
我们今天要聊的内容主要桌面开发四个方面:Windows平台、.NET Core 3 平台上的WPF,Winform, 应用打包解决方案 MSIX 和 XAML 群岛访问原来UWP的控件,让我们的应用程序迅速现代化。
张善友
2020/06/19
2.6K0
【译】基于XAML的跨平台框架对比分析
多年来,基于XAML的UI框架已经有了很大的发展。下面的图表是最好的说明。这些框架主要包含:支持跨平台应用的Avalonia UI, Uno Platform和 .NET MAUI。事实上,除了Avalonia UI之外,对跨平台XAML的需求是其发展的主要驱动力。如果微软早点推出一个类似Flutter这样的跨平台UI框架,我们可能就不会有这个么多的选择。这样有利有弊:好处在于我们选择有很多跨平台方案可以选择,坏处在于不同的框架有不同的对象模型以及各自的特有的XAML语法(dialect of XAML)。 在关注各种 .NET UI 框架时,我们会提出同一个问题:应该使用哪一个XAML UI框架来开发我们的应用?这是一个合理且重要的问题。迄今为止还没有一个明确的答案。但是,对于每个具体的应用,这个问题很容易回答,因为可以针对特定的应用需求比较分析每一种框架的优点和缺点。通过概述基于 XAML 的主要 UI 框架的优点和缺点,本文档旨在帮助公司和开发人员回答以下问题:
czwy
2023/10/22
1.6K0
【译】基于XAML的跨平台框架对比分析
2025年全面的.NET跨平台应用框架推荐
跨平台应用框架在软件开发领域扮演着至关重要的角色,它们通过提供一种统一的方式来开发、测试和维护应用程序,极大地提高了开发效率和减少了成本。今天大姚给大家分享6个开源的.NET跨平台应用框架,同学们可以按需选择对应框架(排名不分先后,适合自己的才是最好的)。
郑子铭
2025/03/06
8740
2025年全面的.NET跨平台应用框架推荐
技术速递|.NET 9简介
今天,我们非常激动地宣布 .NET 9的发布,这是迄今为止最高效、最现代、最安全、最智能、性能最高的 .NET 版本。这是来自世界各地数千名开发人员又一年努力的成果。这个新版本包括数千项性能、安全和功能方面的改进。您会发现在整个 .NET 堆栈(编程语言、开发者工具和工作负载)都有了全面的增强,这使您能够使用统一平台进行构建并轻松地将 AI 融入您的应用程序。
郑子铭
2024/12/06
4310
技术速递|.NET 9简介
.NET Core/.NET5/.NET6 开源项目汇总9:客户端跨平台UI框架
.NET Core 实现了跨平台,支持在 Windwos、Linux、macOS上开发与部署,但是也仅限于Web应用程序。对于Windows桌面端应用程序,WinForm 与 WPF 技术是当前最成熟、应用最多的解决方案。因为它们的UI与Windwos操作系统的底层技术紧密关联,所以在Linux、macOS上无法实现相同的UI功能。目前对于跨平台的桌面端UI需求,.NET还没有统一完整的解决方案。期待.NET6中的MAUI能给大家带来惊喜。下面整理了几款桌面端跨平台解决方案。
张传宁IT讲堂
2021/07/01
12.2K0
基于XAML框架和跨平台项目架构设计的深入技术分析
本文基于Vicky&James 2024年10月22日在韩国Microsoft总部BMW meetup会议上的演讲内容重新整理而成。这次研讨会我们深入探讨了基于XAML的各种平台、跨平台战略以及为有效的项目架构设计所需的核心技术。
郑子铭
2024/12/05
3780
基于XAML框架和跨平台项目架构设计的深入技术分析
dotnet 融合 Avalonia 和 UNO 框架
现在在 .NET 系列里面,势头比较猛的 UI 框架中,就包括了 Avalonia 和 UNO 框架。本文将告诉大家如何尝试在一个解决方案里面融合 Avalonia 和 UNO 两个框架,即在一个进程里面跑起来两个框架
林德熙
2024/06/23
6331
dotnet 融合 Avalonia 和 UNO 框架
.NET周刊【9月第3期 2024-09-15】
https://www.cnblogs.com/thinkingmore/p/18406244
InCerry
2024/11/23
5260
.NET周刊【9月第3期 2024-09-15】
什么是 WPF 技术?什么是 WPF 样式?下载、安装、配置、基本语法简介教程
WPF教程、WPF开发、.NET 8 WPF、Visual Studio 2022 WPF、WPF下载、WPF安装、WPF配置、WPF样式、WPF样式详解、XAML语法、XAML基础、MVVM架构、数据绑定、依赖属性、资源字典、控件模板、ControlTemplate、DataTemplate、动态主题、MahApps.Metro、MaterialDesignInXamlToolkit、FluentWPF、Windows桌面应用开发、WinForms迁移、WPF性能优化、GPU加速、DirectX渲染、矢量UI、开源组件、社区控件、WPF发布、自包含EXE、PublishTrimmed、Ribbon界面——全面覆盖 WPF 入门到高阶的下载、安装、配置与基本语法教程关键词,助力搜索引擎快速收录并精准匹配 WPF 技术学习需求。
猫头虎
2025/05/28
2550
什么是 WPF 技术?什么是 WPF 样式?下载、安装、配置、基本语法简介教程
2024年全面的多端统一开发解决方案推荐!
最近看到有不少小伙伴问:有没有一套代码能够同时在多个平台运行的框架推荐?今天大姚给大家分享8个多端统一开发框架其中语言包括C#、C++、Vue、React、Dart、Kotlin等等(一套代码,可以运行到多个平台从而大幅减轻开发者的开发与维护负担),同学们可以按需选择对应框架(排名不分先后,适合自己的才是最好的)。
追逐时光者
2024/10/18
6210
2024年全面的多端统一开发解决方案推荐!
WinUI 3 Preview 3 发布了,再一次试试它的性能
在微软 Build 2020 开发者大会上,WinUI 团队宣布可公开预览的 WinUI 3 Preview 1,它让开发人员可以在 Win32 中使用 WinUI。最终 XAML 的新功能不再和 Windows SDK 绑定,所有新的 XAML 功能都将作为 WinUI 的一部分发布。 作为 OS 的一部分发布的现有 UWP XAML API 将不会再收到新的功能更新。 但是,它们会在 Windows 10 支持生命周期内继续收到安全更新和关键修复程序。
dino.c
2020/12/16
2.2K0
WinUI 3 Preview 3 发布了,再一次试试它的性能
C#/.NET/.NET Core优秀项目和框架2024年4月简报
公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍、功能特点、使用方式以及部分功能截图等(打不开或者打开GitHub很慢的同学可以优先查看公众号推文,文末一定会附带项目和框架源码地址)。注意:排名不分先后,都是十分优秀的开源项目和框架,每周定期更新分享(欢迎关注公众号:追逐时光者,第一时间获取每周精选分享资讯🔔)。
追逐时光者
2024/05/11
2760
C#/.NET/.NET Core优秀项目和框架2024年4月简报
C#/.NET/.NET Core技术前沿周刊 | 第 47 期(2025年7.14-7.20)
C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。
追逐时光者
2025/07/22
770
C#/.NET/.NET Core技术前沿周刊 | 第 47 期(2025年7.14-7.20)
UWP 通过 .NET 9 和Native AOT 的支持实现 UWP 应用的现代化
微软(9 月 11 日)发布博文,微软正在预览对 .NET 9 的 UWP(通用 Windows 平台)支持,为现有 UWP 开发人员提供一条使用最新的 .NET 和本机 AOT 实现其应用程序现代化的途径。这样做是因为该公司敦促开发人员切换到 Windows App SDK 和 WinUI 3,可以让现有 UWP 开发者利用最新 .NET 和 Native AOT 来现代化改造其应用。
JusterZhu
2025/01/23
3470
UWP 通过 .NET 9 和Native AOT 的支持实现 UWP 应用的现代化
.NET 基金会项目介绍-Windows Forms
Windows Forms 是属于 .Net 基金会的一个项目,本文将简要介绍该项目相关的信息。
newbe36524
2020/03/16
8850
C++和C#界面开发方式的全面对比
在桌面应用开发中,C++和C#是两种非常常用的编程语言,它们各自提供了多种用于开发用户界面的技术和框架。除了广为人知的MFC、Qt和WPF之外,还有其他一些选择。本文将详细介绍这些界面开发方式,并通过表格对比它们的优缺点,帮助开发者更好地选择适合自己的工具。
码事漫谈
2025/06/03
2310
C++和C#界面开发方式的全面对比
译 | .NET Multi-platform App UI 多平台应用 UI 框架简介
现在可以使用 .NET 构建一切应用。富有生产力的 .NET 是当前数百万的开发者选择这个平台的理由。在 .NET 5 微软统一了整个 .NET 平台,将 .NET Core 和 Mono 以及基于 Mono 的 Xamarin 放在一起,于是就可以使用相同的一个 BCL 基础库和 SDK 工具链
郑子铭
2021/11/10
5.5K0
译 | .NET Multi-platform App UI 多平台应用 UI 框架简介
推荐阅读
相关推荐
WinUI 3 试玩报告
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档