.NET跨平台框架选择之一 - Avalonia UI

news2024/9/20 15:21:44

1. Avalonia UI简介

 

Avalonia UI文档教程:https://docs.avaloniaui.net/docs/getting-started

随着跨平台越来越流行,.NET支持跨平台至今也有十几年的光景了(Mono开始)。

但是目前基于.NET的跨平台,大多数还是在使用B/S架构的跨平台上;至于C/S架构,大部分人可能会选择Qt进行开发,或者很早之前还有一款Mono可以支持.NET开发者进行开发跨平台应用,自微软收购Xamarin后,今年又正式发布了MAUI跨平台框架,外加第三方的跨平台框架Uno[Avalonia UI](Avalonia UI - Home)选择,技术栈多的炸裂呀。

今天介绍的是Avalonia UI,站长也是研究了好几天,这是一个基于WPF XAML的跨平台UI框架,并支持多种操作系统(Windows(.NET Core),Linux(GTK),MacOS,Android和iOS),Web(WebAssembly)。

2. Avalonia UI桌面三大平台演示

这是Avalonia UI官方网站的一个Demo,站长对部分Nuget包进行了升级,网友【小飞机MLA】对Linux版本修复了字体Bug得以正常运行、演示。

2.1 本文案例

一个音乐专辑搜索、展示小程序,功能如下:

  • 首页:展示已购买的音乐专辑;

  • 专辑选择页:专辑搜索、购买;

2.2 案例资料

案例教程:https://docs.avaloniaui.net/tutorials/music-store-app

案例原源码:https://github.com/AvaloniaUI/Avalonia.MusicStore

站长升级版源码:AvaloniaTest/src/Avalonia.MusicStore at main · dotnet9/AvaloniaTest · GitHub

本文示例体验下载地址:Avalonia.MusicStore(测试)

2.3 案例演示

Windows 11:

macOS 13:

可安装Rider(用EAP即可)开发,站长一次性直接编译运行(站长使用的.NET 7),运行调试过于顺畅,与使用MAUI相比不敢相信...

国产麒麟V10操作系统

站长安装麒麟OS折腾了一会儿,文件传输不熟悉(最后使用的百度网盘中转...),运行命令也不熟(需要给运行程序设置执行权限777),后面是网友【小飞机MLA】解决了Linux字体问题,站长得以开心的运行并录了视频分享。

2.4 小缺憾

三个平台功能相同,只是Linux自定义标题栏未生效,有网友提示可以隐藏标题栏,自己实现控制按钮(最小化、最大化(还原)、关闭),后面官方应该会解决Linux下这个问题,继续研究、整!

3. Avalonia UI其他示例

3.1 网友的分享

以下内容摘自博文Avalonia学习实践(二)--跨平台支持及发布。

3.1.1 支持的平台

支持的平台信息详细如下:

运行平台版本
WindowsWindows8及其以上版本(Window7也能用,但不保证没问题)
MacOSMacOS High Serra 10.13及其以上版本
LinuxDebian 9、Ubuntu 16.5、Fedora 30及其以上(主要是各种发行版)

移动端跨平台,也就是iOS和Android的支持。

Web支持,即WebAssembly,这是国际标准。

3.1.2 使用Linux内核国产操作系统的情况

操作系统研制单位备注
银河麒麟天津麒麟信息技术有限公司
中标麒麟中标软件科技有限公司原中标普华
统信UOS统信软件科技有限公司
中科方德中科方德软件有限公司
优麒麟中国CCN联合实验室基于Ubuntu发行版

发布选项:

发布至测试环境(统信UOS、AMD处理器,所以选择linux-x64)如下:

运行效果如下:

附.国产CPU指令集路线

国产CPU指令集
龙芯loongarch(站长注:网友指正是 loongarch,原文是MIPS)
海光x86
兆芯x86
飞腾arm
鲲鹏arm
申威Alpha

其中龙芯是完全自主的指令集 loongarch(站长注:多谢张队指出),前段时间也刚刚更新了对.Net的支持;x86主要是生态好,传统桌面处理器intel、AMD都是x86架构,做兼容适配也方便些;arm以前移动端较多,现在桌面端也逐渐赶上。

3.2 其他示例

示例来自仓库Avalonia。

基于Avalonia搭建的项目部分如下:

3.2.1 Lunacy

这是一款免费设计软件,通过AI工具和内置图形保持流畅。

项目网站:Lunacy – Free Design Software for Win, Mac, Linux

以下来源于B站的一个视频:(搬运/英文)使用 Lunacy 设计一个网站首页!

3.2.2 Plastic

宣传语:Create without compromise:不妥协地创造

Unity Plastic SCM是一个版本控制和源代码管理工具,旨在提高团队协作和与任何引擎的可扩展性。它为艺术家和程序员提供了优化的工作流程,以及处理大型文件和二进制文件的速度。

项目网站:Plastic SCM - The Distributed Version Control for Big Projects

3.2.3 WasabiWallet

用于桌面的开源、非托管比特币钱包。

项目网站:Wasabi Wallet - Bitcoin privacy wallet with built-in coinjoin

4. Avalonia UI与WPF

Maui的原生控件从命名、属性列表看和原生Android类似,但Xaml语法和WPF相同,站长使用Maui原生控件不多,只浅显地发表这部分看法,不贴相关代码,Maui学习请点这里。

而Avalonia UI呢,和WPF就几乎相同了,下面翻译原文数据绑定部分文档,熟悉WPF的同学可以对比:

绑定到控件

除了绑定数据到一个控件的DataContext,您还可以绑定到其他控件。

请注意,执行此操作时,绑定源是控件本身,而不是控件的DataContext. 如果你想绑定到控件DataContext,那么你需要在绑定路径中指定它。

4.1 绑定到命名控件

如果要绑定到另一个命名控件的属性,可以使用以#字符为前缀的控件名称(站长注:这里类似前端的css id选择器,其实Avalonia UI样式扩展的借鉴大部分来源于前端,站长猜测的哈)。

 
<TextBox Name="other">
<!-- Binds to the Text property of the "other" control -->
<TextBlock Text="{Binding #other.Text}"/>

这相当于 WPF 和 UWP 用户熟悉的 long-form(长表单)绑定:

 
<TextBox Name="other">
<TextBlock Text="{Binding Text, ElementName=other}"/>

Avalonia 支持这两种语法,但短格式#语法不那么冗长。

4.2 绑定到祖先

您可以使用以下符号绑定到目标的逻辑父级:$parent

 
<Border Tag="Hello World!">
<TextBlock Text="{Binding $parent.Tag}"/>
</Border>

或者通过向$parent符号添加Index(索引)来传递给祖先:

 
<Border Tag="Hello World!">
<Border>
<TextBlock Text="{Binding $parent[1].Tag}"/>
</Border>
</Border>

索引是从 0 开始的,因此$parent[0]等同于$parent.

您还可以按类型绑定到祖先:

 
<Border Tag="Hello World!">
<Decorator>
<TextBlock Text="{Binding $parent[Border].Tag}"/>
</Decorator>
</Border>

最后,您可以组合索引和类型:

 
<Border Tag="Hello World!">
<Border>
<Decorator>
<TextBlock Text="{Binding $parent[Border;1].Tag}"/>
</Decorator>
</Border>
</Border>

如果您需要在祖先类型中包含 XAML 命名空间,您可以使用字符:像往常一样来做到这一点:

 
<local:MyControl Tag="Hello World!">
<Decorator>
<TextBlock Text="{Binding $parent[local:MyControl].Tag}"/>
</Decorator>
</local:MyControl>

Avalonia 还支持 WPF/UWP 的RelativeSource语法,其功能类似但又不相同。RelativeSource适用于可视树,而此处给出的语法适用于逻辑树。

关于Avalonia UI的更多用法请点击这里学习。

5. JetBrains Rider支持

JetBrains Rider现在正式支持Avalonia。
对于XAML预览器添加,支持代码完成、检查和重构https://plugins.jetbrains.com/plugins/dev/14839到插件库并安装AvaloniaRider插件。

6. 常问问题

翻译自: Avalonia UI FAQ

6.1 我可以编写我的UI而不是使用XAML吗?

是的。您可以使用首选的.NET语言对整个UI进行编码。

6.2 有可视化拖拽设计器吗?

不支持。Avalonia IDE扩展支持实时预览,在您修改XAML时实时刷新呈现UI的预览,从而替换拖放设计器。

6.3 Avalonia是否支持热重载?

您可以使用社区项目来启用Avalonia 的热重载。

6.4 Avalonia可以与原生API互操作吗?

是的。

6.5 我可以针对不同平台进行交叉编译吗?

是的。您可以在Windows平台上,为macOS和Linux平台编译目标程序。您可能需要在这些平台上打包您的应用程序以创建您的应用程
序的发布包。

6.6 我可以使用Avalonia构建移动应用程序吗?

是的。您现在可以为Android开发,我们有一个预览展示了iOS支持的开始。但是,您应该仔细考虑每个平台, 并确保您的应用程序在较小的触控设备上表现良好。

6.7 我可以用Avalonia建立网站吗?

它还处于早期阶段, 还没有准备好投入生产,但是是的,你可以。Avalonia现在支持Web Assembly。 请参考快速演示: NodeEditor Demo。这意味着您的完整Avalonia应用程序可以在所有现代网络浏览器中运行。

6.8 我怎样才能参与其中?

查看社区指南,了解如何参与该项目。

6.9 支持哪些Linux发行版?

  • Debian 9 (Stretch)+
  • Ubuntu 16.04+
  • Fedora 30+

Skia 是针对glibc构建的。如果您的发行版使用其他东西,您需要使用SkiaSharp构建您自己的libSkiaSharp.so。我们仅为Intel x86-64提供预编译的二进制文件。计划支持ARM/ARM64。

6. 10支持哪些版本的macOS?

macOS High Sierra 10.13+

时间如流水,只能流去不流回。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/22120.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据分析面试重点

2022年10月求职季&#xff0c;疫情的影响&#xff0c;但是也挡不住各位小伙伴&#xff0c;找工作的热情。目前&#xff0c;数据分析行业大火&#xff0c;相信很多小伙伴都想去这一行业试试水。想要成功进入数据分析行业&#xff0c;就必须得通过数据分析面试&#xff0c;面试的…

计控实验(二)——积分分离PID控制实验

太原理工大学计算机控制技术实验之积分分离PID控制实验 积分分离PID控制实验实验原理实验内容实验结果思考题实验原理 上图是一个典型的PID 闭环控制系统方框图&#xff0c;其硬件电路原理及接线图可设计如下&#xff0c;图中画“○”的线需用户在实验中自行接好&#xff0c;对…

跟艾文学编程《Python基础》PyCharm 安装

作者&#xff1a;艾文&#xff0c;计算机硕士学位&#xff0c;企业内训讲师和金牌面试官&#xff0c;公司资深算法专家&#xff0c;现就职BAT一线大厂。 邮箱&#xff1a;1121025745qq.com 博客&#xff1a;https://edu.csdn.net/lecturer/894?spm1003.2001.3001.4144 内容&am…

[附源码]java毕业设计文具销售系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

6、子查询 、having、(not) exists、表中增加一列并补充数据、删除表中对应的数据-mysql

目录子查询一、需求分析与问题解决1、实际问题2、子查询的基本使用3、子查询的分类二、单行子查询1、单行比较操作符2、 代码示例3、HAVING 中的子查询4、CASE中的子查询5、 子查询中的空值问题6、 非法使用子查询三、多行子查询1、多行比较操作符2、代码示例3、空值问题四、 相…

《Flowable流程引擎从零到壹》Flowable流程引擎介绍和实战项目初始化流程引擎实例

14天学习训练营导师课程&#xff1a; 邓澎波《Flowable流程引擎-基础篇【2022版】》 邓澎波《Flowable流程引擎-高级篇【2022版】》 学习笔记《Flowable流程引擎从零到壹》回城传送 ❤️作者主页&#xff1a;小虚竹 ❤️作者简介&#xff1a;大家好,我是小虚竹。Java领域优质创…

mysql中的这些日志,你都知道吗?

在使用mysql的过程中&#xff0c;经常会听到mysql具有数据恢复能力&#xff0c;当我们在业务开发中误删了某些数据后&#xff0c;可以将数据库恢复到误删之前的状态。同时还具有故障恢复能力&#xff0c;当数据库所在的机器突然掉电停机后&#xff0c;mysql也可以保证数据一致性…

Java8 Stream 的核心秘密

小伙伴们好呀&#xff0c;我是 4ye&#xff0c;今天来分享下 Java8 Stream 的源码 核心回顾 stream 是一次性的&#xff0c;不是数据结构&#xff0c;不存储数据&#xff0c;不改变源数据.。API 分为终端和中间操作&#xff0c;中间操作是惰性的&#xff0c;碰到终端才去执行。…

python自动化测试

测试软件&#xff1a;pycharm 解释器版本&#xff1a;3.10.7 测试浏览器&#xff1a;谷歌 或 edge 谷歌web驱动下载地址&#xff1a;chromedriver.storage.googleapis.com/index.html edgeweb驱动下载地址&#xff1a;Microsoft Edge WebDriver - Microsoft Edge Developer 第一…

免费查题接口系统后台

免费查题接口系统后台 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;点…

零基础自学javase黑马课程第十三天

零基础自学javase黑马课程第十三天 ✨欢迎关注&#x1f5b1;点赞&#x1f380;收藏⭐留言✒ &#x1f52e;本文由京与旧铺原创&#xff0c;csdn首发&#xff01; &#x1f618;系列专栏&#xff1a;java学习 &#x1f4bb;首发时间&#xff1a;&#x1f39e;2022年11月7日&…

springboot视图渲染技术

目录 一、Freemarker简介及入门 二、Freemarker语法 1、取值 1.1默认值 1.2 对null值进行判断 2、条件 3、循环 4、include 5、 局部变量(assign)/全局变量(global) 一、Freemarker简介及入门 学习网址&#xff1a;什么是 FreeMarker? - FreeMarker 中文官方参考手册 …

2022强网拟态pwn-webheap

2022强网拟态pwn-webheap 这题的逻辑是一开始笔者硬逆给逆出来了&#xff0c;但是后面在Ex师傅的点播下成功的在github上找到了这个的原生项目 https://github.com/google/libnop 在审计的过程中发现了至关重要的信息&#xff0c;发现和逆向的格式一样的东西&#xff0c;就是…

BCN-PEG2-Mal,BCN-OH,endo-BCN-PEG2-BiotinBCN几种衍生物的特点

BCN-PEG 是一类具有双环[6.1.0]壬炔的 PEG 接头。它用于叠氮化物反应性无铜点击化学。BCN在没有催化剂的情况下很容易与叠氮官能化化合物或生物分子反应形成稳定的三唑键&#xff0c;PEG间隔物增加了所得化合物的水溶性。今天这一章西安凯新生物科技有限公司​主要为大家分享BC…

多段曲线控温从Simulink仿真到PLC控制实现

多段曲线温度控制,专栏有系列文章和完整源代码,大家可以自行搜索。链接如下: 博途PLC 1200/1500PLC多段曲线控温FB(支持40段控温曲线、段曲线搜索、暂停、跳段等功能)_RXXW_Dor的博客-CSDN博客多段控温曲线之前专栏的其它文章也有所讲解,大家可以参看下面这篇专栏博途1200…

Get CLI - 强大的项目管理 GetX 工具

Get CLI - 强大的项目管理 GetX 工具 https://shirsh94.medium.com/get-cli-powerful-getx-tool-for-project-management-bdf54572d91f 前言 一个来自 Getx 的工具可以帮助你快速的建立项目&#xff0c;页面和视图。 大家好&#xff0c;在本文中&#xff0c;我将讨论 get CLI 工…

PTA题目 奇偶分家

给定N个正整数&#xff0c;请统计奇数和偶数各有多少个&#xff1f; 输入格式&#xff1a; 输入第一行给出一个正整N&#xff08;≤1000&#xff09;&#xff1b;第2行给出N个非负整数&#xff0c;以空格分隔。 输出格式&#xff1a; 在一行中先后输出奇数的个数、偶数的个…

深度学习中常见概念(收敛、优化器、学习率等)

收敛 打个简单的比方&#xff0c;训练网络模型&#xff0c;就好比解方程&#xff0c;为了得到这个方程的极值点&#xff0c;训练的过程就好比是找准一个方向&#xff0c;不断的朝这个方向靠近,使得方程的值不断减小&#xff0c;最终达到极值点&#xff0c;而不收敛&#xff0c…

微型计算机基础(常用术语,总线,系统组成)

目录 微型计算机常用术语 计算机系统 基本组成图​编辑 Cache&#xff08;内存和CPU之间&#xff09; 虚存&#xff08;内存和外存之间 &#xff09; CPU是微机的核心部件&#xff0c;具有运算和控制功能 总线 数据中线DB&#xff08;Data Bus&#xff09; &#xff0…

kubernetes集群配置默认存储类(nfs)

文章目录概述安装nfs服务端node节点上安装启动nfs配置StorageClass创建Deployment创建ServiceAccount创建StorageClass对象创建资源对象常见问题参考文档概述 StorageClass 为管理员提供了描述存储 “类” 的方法。 不同的类型可能会映射到不同的服务质量等级或备份策略&#x…