Avalnoia跨平台实战记录(一),Avalonia初始化
前言:
记录一下小菜鸟程序员从WPF一知半解转向Avalonia跨平台桌面端开发的一点记录和感想,我个人是比较喜欢用.NET来开发的,当然,这也和我的技术栈有很大关系,本人只是从大专出来的,在学校里学的就是.NET,所以各位看官不喜勿喷,技术只是个人爱好。
所以刚开始看到Avalonia的时候,觉得挺有趣的,一直以来,我相对来讲喜欢桌面端开发,前端开发地狱级的CSS调的我头痛,很多开源框架一旦封装的过于复杂改起来也头痛。所以一下子看到跨平台的桌面端,而且还是自己会的技术栈,兴趣一下就上来了。
安装Avalonia模板

安装命令
dotnet new install Avalonia.Templates
也可以查看官网文档,Alalonid官方文档
IDE选择
对于IDE,目前支持的有Visual Studio、Visual Code、JetBrains Rider,这里我是用的是Rider,不是说vs不好,而是vs的扩展还有很多问题,至少添加控件编译上经常报错,识别不到代码。我不知道大家有没有遇到这种问题,后续演示的IDE都是使用Rider。
IDE设置请查看下图或者查看官方文档
Rider在设置中插件搜索AvaloniaRider插件安装即可

Visual Studio在扩展中搜索Avalonia for Visual Studio

创建项目
打开Rider,选择新建解决方案,如下图

在这里,我们能看到有三个模板。
Avalonia.NET App 默认模板、
Avalonia.NET MVVM App 带MVVM的模板 、
Avalonia Cross Platform Application 跨平台模板
我选择的是带MVVM的模板,在Avalonia中有两个MVVM框架,一个就是我们比较熟悉的CommunityToolkit,还有一个名为ReactiveUI的mvvm框架,这里我使用的是ReactiveUI
其实对于这个新的mvvm我也不太熟,但是我这个人比较喜欢尝试新事物,所以即使坑多也照样用,哈哈。如果大家想选择这个框架,还是先去看下官网文档,ReactiveUI官方文档。
进入项目我们能看到下图的项目结构

我们可以看到App.axml下多了这么一段代码,项结构中也多了一个ViewLocator
<Application.DataTemplates>
<local:ViewLocator/>
</Application.DataTemplates>

这个类有什么用呢,后续说导航的时候会给大家解释一下,因为Avalonia和WPF的导航有区别
这里Reactive的响应式全部继承至ViewModelBase,ViewModelBase又继承ReactiveObject,至于为什么这个模板得绕一层,我不是很明白,欢迎大佬给我解答一下
热重载
在vs和Rider中,虽然我们有看到热重载,但是没办法像WPF中那样,我们去更改xml代码,效果会实时更新。
对于Avalonia中的现有的热重载只现定于.cs文件。所以,在这种情况下开发效率就很低。
那我们就没办法了吗,其实有的,有一个现成的库可以帮我们实现这一个热重载功能,HotAvalonia,HotAvalonia热重载


我们在项目的csproj文件中加入这么一行代码引入这个包
<PackageReference Include="HotAvalonia" Version="3.0.0" PrivateAssets="All" Publish="True" />
并且在App.axml.cs中的Initialize()方法加入这么一行代码,如下图

一定得加在
AvaloniaXamlLoader.Load(this);这句代码前面,这样我们就完成了热重载。
可以看到,我们一边写一边效果就出来了,增大了我们的开发效率。
Avalnoia跨平台实战记录(一),Avalonia初始化的更多相关文章
- celery+RabbitMQ 实战记录2—工程化使用
上篇文章中,已经介绍了celery和RabbitMQ的安装以及基本用法. 本文将从工程的角度介绍如何使用celery. 1.配置和启动RabbitMQ 请参考celery+RabbitMQ实战记录. ...
- 升级 Elasticsearch 集群数量实战记录
搜索引擎 升级 Elasticsearch 集群数量实战记录 现在线上有一个elasticsearch集群搜索服务有三台elasticsearch实例(es1.es2.es3),打算将其升级为5台(增 ...
- re实战记录
re实战记录 针对网页中的空格符 一般使用的.,但是它不能匹配\n,所以使用[\s\S]或者[\d\D]匹配所有字符 import re l1=r''' <div class="thu ...
- Rails工程实战记录
项目git:https://github.com/yixiaoyang/ruby 为熟悉Rails的基本特性创建的工程,本博文仅作更新记录. (1)2013.10.1-2013.10.5 Ruby基本 ...
- sikuli实战记录
最近,为了解放运营人力,需要对某国企的系统进行自动化操作.该系统使用的是https,需要加载证书,而且非得用IE才行,firefox无法正常的加载证书.而selenium启动的IE是纯净的,不会加载任 ...
- vue实战记录(一)- vue实现购物车功能之前提准备
vue实战,一步步实现vue购物车功能的过程记录,课程与素材来自慕课网,自己搭建了express本地服务器来请求数据 作者:狐狸家的鱼 本文链接:vue实战-实现购物车功能(一) GitHub:sue ...
- Java 性能优化实战记录(3)--JVM OOM的分析和原因追查
前言: C/C++的程序员渴望Java的自由, Java程序员期许C/C++的约束. 其实那里都是围城, 外面的人想进来, 里面的人想出去. 背景: 作为Java程序员, 除了享受垃圾回收机制带来的便 ...
- vue实战记录(五)- vue实现购物车功能之商品总金额计算和单选全选删除功能
vue实战,一步步实现vue购物车功能的过程记录,课程与素材来自慕课网,自己搭建了express本地服务器来请求数据 作者:狐狸家的鱼 本文链接:vue实战-实现购物车功能(五) GitHub:sue ...
- vue实战记录(六)- vue实现购物车功能之地址列表选配
vue实战,一步步实现vue购物车功能的过程记录,课程与素材来自慕课网,自己搭建了express本地服务器来请求数据 作者:狐狸家的鱼 本文链接:vue实战-实现购物车功能(六) GitHub:sue ...
- vue实战记录(四)- vue实现购物车功能之过滤器的使用
vue实战,一步步实现vue购物车功能的过程记录,课程与素材来自慕课网,自己搭建了express本地服务器来请求数据 作者:狐狸家的鱼 本文链接:vue实战-实现购物车功能(四) GitHub:sue ...
随机推荐
- Nukem pg walkthrough Intermediate
nmap 扫描 ┌──(root㉿kali)-[~] └─# nmap -p- -A 192.168.157.105 Starting Nmap 7.94SVN ( https://nmap.org ...
- 创新突破!天翼云荣膺CCF HPC China 2024高性能计算创新大奖
近日,第20届CCF全国高性能计算学术年会(CCF HPC China 2024)在武汉隆重召开.CCF HPC China是全球高性能计算领域三大标志性盛会之一,本届大会以"华章廿载 新质 ...
- 鸿蒙页面开发 - 组件复用样式 @Styles
这篇文章介绍一个装饰器 @Styles 他的主要作用是: 当多个组件都有相同的样式,如果每个组件单独设置,会造成大量重复的代码冗余.这时我们可以使用 @Styles 将这些相同样式封装成一个方法,供这 ...
- flutter-修改Android包名
- C# TorchSharp 图像分类实战:VGG大规模图像识别的超深度卷积网络
目录 图像分类 | VGG大规模图像识别的超深度卷积网络 数据集 直接下载 opendatalab 数据集社区 自定义数据集 模型训练 教程名称:使用 C# 入门深度学习 作者:痴者工良 教程地址: ...
- AI 艺术工具通讯
创刊号 AI 领域的发展速度令人惊叹,回想一年前我们还在为生成正确手指数量的人像而苦苦挣扎的场景,恍如隔世 . 过去两年对开源模型和艺术创作工具而言具有里程碑意义.创意表达的 AI 工具从未像现在这般 ...
- docker - [06] 安装部署Tomcat
题记部分 一.官方测试镜像 官方文档给出以下命令,一般用来测试,用完即删,下载并运行镜像,退出镜像就会自动删除镜像?亲测不会自动删除 docker run -it --rm tomcat:9.0 使用 ...
- 『玩转Streamlit』--缓存机制
Streamlit 应用在运行时,每次用户交互都会触发整个脚本的重新执行. 这意味着一些耗时操作,如数据加载.复杂计算和模型训练等,可能会被重复执行,严重影响应用响应速度. 本文介绍的缓存机制能够帮助 ...
- idea中启动web、jsp项目
1. idea打开项目 选择要打开的项目的根目录 2. 项目配置 配置jdk modules配置 添加web 添加依赖 删除爆红的依赖 添加依赖目录或者jar 配置web.xml 配置lib 如果没有 ...
- Chrome打开知乎报ERR_HTTP2_PROTOCOL_ERROR错误的问题
打开 chrome://flags/ 页面 找到 Block insecure private network requests. 和 Enable Trust Tokens 两项 将其值从 Defa ...