首页 > 其他分享 >使用 .NET 构建 UI 界面的各种方式

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

时间:2024-07-01 21:32:08浏览次数:1  
标签:界面 Windows UWP WinUI UI NET WPF

微软搞出了很多构建 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,而且不会有更新的版本了,但是 .NET Core 一直在更新。如果没有什么特殊的理由,应该直接使用 .NET Core 来构建 WinForms 和 WPF 程序。

这里可以看到一些 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 的一部分,并不独立存在。
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 还是 .NET MAUI? :r/csharp --- WinUI or .NET MAUI? : r/csharp

原文链接:https://www.cnblogs.com/jasongrass/p/18276795

标签:界面,Windows,UWP,WinUI,UI,NET,WPF
From: https://www.cnblogs.com/jasongrass/p/18276795

相关文章

  • HarmonyOS 开发探索: ArkUI常用样式布局
     ArkUI布局简介ArkUI支持多种布局方式,包括但不限于Column、Row、Stack、Flex等。这些布局方式能够满足不同的UI设计需求,帮助开发者高效地创建复杂的界面。1.Column布局Column布局用于垂直排列子组件,适用于需要纵向排列元素的场景。它在创建列表、表单等界面时非常实用。@......
  • ros - Adafruit ESP32 Feather与树莓派(Raspberry Pi)比较
    AdafruitESP32Feather和树莓派(RaspberryPi)都是广泛使用的硬件平台,分别在嵌入式系统和单板计算机领域具有各自的优势。以下是它们的详细比较,以及它们对机器人操作系统(ROS)的支持程度的分析。1.基本特性比较AdafruitESP32Feather核心处理器:双核XtensaLX6(最高240MHz)。......
  • 【App Service】解决 .NET Profiler 报告打开后无数据加载的问题
    问题描述AppService上可以收.NET应用的ProfileTrace文件,并且可以自动分析报告。CollectaProfilerTraceIfyourappisdownorperformingslow,youcancollectaprofilingtracetoidentifytherootcauseoftheissue.Profilingislightweightandisdesigne......
  • 使用Vue 2 + Element UI搭建后台管理系统框架实战教程
    后台管理系统作为企业内部的核心业务平台,其界面的易用性和功能性至关重要。Vue2作为一个成熟的前端框架,以其轻量级和高效著称,而ElementUI则是一套专为桌面端设计的Vue2组件库,它提供了丰富的UI元素和组件,大大简化了后台管理系统的开发过程。本篇博客将深入介绍如何利用Vue2......
  • 经典的卷积神经网络模型 - AlexNet
    经典的卷积神经网络模型-AlexNetflyfishAlexNet是由AlexKrizhevsky、IlyaSutskever和GeoffreyHinton在2012年提出的一个深度卷积神经网络模型,在ILSVRC-2012(ImageNetLargeScaleVisualRecognitionChallenge2012)竞赛中取得了显著的成果,标志着深度学习在计......
  • 经典的卷积神经网络模型 - VGGNet
    经典的卷积神经网络模型-VGGNetflyfishVGG网络的名称来源于其开发团队——牛津大学的视觉几何组(VisualGeometryGroup)在2014年,牛津大学的视觉几何组和GoogleDeepMind公司的研究人员也不例外,研发了一个名为VGG的网络,VGG网络的一个主要贡献是展示了网络的深度(即层数)在......
  • Linux 中 uid、gid、euid、egid、groups 之间的关系
    导航1权限匹配流程2五种身份变化3有效用户/组4特权对Shell脚本无效5Sudo与SUID/SGID的优先级6SUID、SGID、Sticky各自的功能Linux最优秀的地方之一,就在于他的多人多工环境。而为了让各个使用者具有较保密的档案资料,因此档案的权限管理就变的很重要了。Linu......
  • .net 8项目通过Autofac获取程序集服务并注册
    首先新建一个AutofacModuleRegister类并继承Autofac.Module。publicclassAutofacModuleRegister:Autofac.Module{protectedoverridevoidLoad(ContainerBuilderbuilder){varbasePath=AppContext.BaseDirectory;varservicesDll......
  • ASP.NET Core MVC 从入门到精通之HttpContext
    原文链接:https://www.cnblogs.com/hsiang/p/17368101.html什么是HttpContext?在B/S模式开发的程序中,客户端是浏览器,服务器端Web服务程序,HttpContext是连接客户端和服务器端程序的桥梁,交代了当前请求的环境信息,它封装了请求[Request]和响应[Response]及其他所有信息,示意图如下所......
  • 基于Java语言编写的超市管理系统,基于JavaFX构建的图形化界面
    开发起因学校实训分组要求每小组交一份实训项目,本小组共有3人,一人后端,两人前端下面是另两位大佬csdn账号......