前言:

记录一下小菜鸟程序员从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初始化的更多相关文章

  1. celery+RabbitMQ 实战记录2—工程化使用

    上篇文章中,已经介绍了celery和RabbitMQ的安装以及基本用法. 本文将从工程的角度介绍如何使用celery. 1.配置和启动RabbitMQ 请参考celery+RabbitMQ实战记录. ...

  2. 升级 Elasticsearch 集群数量实战记录

    搜索引擎 升级 Elasticsearch 集群数量实战记录 现在线上有一个elasticsearch集群搜索服务有三台elasticsearch实例(es1.es2.es3),打算将其升级为5台(增 ...

  3. re实战记录

    re实战记录 针对网页中的空格符 一般使用的.,但是它不能匹配\n,所以使用[\s\S]或者[\d\D]匹配所有字符 import re l1=r''' <div class="thu ...

  4. Rails工程实战记录

    项目git:https://github.com/yixiaoyang/ruby 为熟悉Rails的基本特性创建的工程,本博文仅作更新记录. (1)2013.10.1-2013.10.5 Ruby基本 ...

  5. sikuli实战记录

    最近,为了解放运营人力,需要对某国企的系统进行自动化操作.该系统使用的是https,需要加载证书,而且非得用IE才行,firefox无法正常的加载证书.而selenium启动的IE是纯净的,不会加载任 ...

  6. vue实战记录(一)- vue实现购物车功能之前提准备

    vue实战,一步步实现vue购物车功能的过程记录,课程与素材来自慕课网,自己搭建了express本地服务器来请求数据 作者:狐狸家的鱼 本文链接:vue实战-实现购物车功能(一) GitHub:sue ...

  7. Java 性能优化实战记录(3)--JVM OOM的分析和原因追查

    前言: C/C++的程序员渴望Java的自由, Java程序员期许C/C++的约束. 其实那里都是围城, 外面的人想进来, 里面的人想出去. 背景: 作为Java程序员, 除了享受垃圾回收机制带来的便 ...

  8. vue实战记录(五)- vue实现购物车功能之商品总金额计算和单选全选删除功能

    vue实战,一步步实现vue购物车功能的过程记录,课程与素材来自慕课网,自己搭建了express本地服务器来请求数据 作者:狐狸家的鱼 本文链接:vue实战-实现购物车功能(五) GitHub:sue ...

  9. vue实战记录(六)- vue实现购物车功能之地址列表选配

    vue实战,一步步实现vue购物车功能的过程记录,课程与素材来自慕课网,自己搭建了express本地服务器来请求数据 作者:狐狸家的鱼 本文链接:vue实战-实现购物车功能(六) GitHub:sue ...

  10. vue实战记录(四)- vue实现购物车功能之过滤器的使用

    vue实战,一步步实现vue购物车功能的过程记录,课程与素材来自慕课网,自己搭建了express本地服务器来请求数据 作者:狐狸家的鱼 本文链接:vue实战-实现购物车功能(四) GitHub:sue ...

随机推荐

  1. 找不到 MSVCP60D.dll

    问题 VC++ 运行程序时,出现错误: 解决办法 参考:链接 1.下载MSVCP60D.dll,下载:链接 下载的文件为64位,故应将文件复制到:C:\Windows\SysWOW64目录 2.打开& ...

  2. js脚本实现文本文件格式批量转换

    问题: 在Windows环境下,从某些软件中导出的文本格式的数据,选择了默认的ANSI格式.双击打开数据文件后,一切正常,没乱码问题.但是为什么自己的代码里,先按照ANSI格式打开,在转换为UTF8, ...

  3. 解决NuGet加载或下载资源慢的问题

    我们在使用NuGet默认的服务地址访问资源时,有时候会遇到加载或下载速度很慢的情况,原因是默认的服务地址是国外的,大家都懂.此时我们可以采取一些"措施",多添加几个国内的资源访问地 ...

  4. Kali 启动默认的服务

    Kali 启动默认的服务 在Kali Linux中,您可以使用systemctl命令来管理服务,包括设置服务的自动启动. 设置Apache服务自动启动 设置 Apache 服务自动启动.执行以下命令: ...

  5. windows jdk环境变量配置

    新建环境变量[classpath]变量值为[.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar] 新建环境变量[JAVA_HOME]变量值为jdk的安装目录 如:[ ...

  6. DeepSeek-R1满血版性能飙升四倍,成本大降,竟是因为……

    近日,天翼云DeepSeek模型推理技术迎来重大升级!该技术不仅支撑DeepSeek-R1满血版模型实现性能的四倍提升,更将大规模部署模型的成本降至原来的25%以下,为AI应用落地铺就更为宽广的道路. ...

  7. 创建Graphics对象的三种方法

    参考链接:https://www.cnblogs.com/wax01/p/4982691.html 方法一.利用控件或窗体的Paint事件中的PainEventArgs 在窗体或控件的Paint事件中 ...

  8. [CF1981E] Turtle and Intersected Segments 题解

    好题好题. 难点在建图,因为图的边数将会决定最小生成树的时间复杂度.我们肯定希望能够只建 \(O(n)\) 级别的边,这样时间复杂度就可以做到 \(O(n\log n)\). 观察到当 \(i,j,k ...

  9. SpringBoot实现HandlerInterceptor拦截器的接口没有需要重写的方法也不报错是怎么回事

    以前实现HandlerInterceptor接口,总会提示需要实现3个方法(preHandle.postHandle.afterCompletion).现在没有出现提示.原因:这是Java8的新特性- ...

  10. 如何用爱思助手给苹果iPhone手机免越狱修改虚拟定位教程

    使用爱思助手修改定位的方法: 1.在电脑上下载安装 爱思助手 客户端,并更新到最新版,用数据线将苹果移动设备连接到电脑. 2.连接成功后,依次打开爱思助手"工具箱 - 虚拟定位". ...