前言
本文所有讲解是以VS2022为开发工具,官方提供了VS2022和2019的扩展支持,大家根据自己的是实际情况下载相应的扩展进行安装。
安装扩展
如下图,我们在扩展菜单里面找到扩展管理,如下图:
在扩展管理的搜索栏里面输入“Avalonia”进行搜索,找到下图所示的选项进行安装,安装完成后如下图。
使用Avalonia模版创建我们的第一个应用
点击下一步
选择Desktop,点击Next
、
、、、、、、、
点击Creat,完成创建
创建好的解决方案如下:
从字面上也很好理解,AvaloniaTest.Desktop是我们客户端应用的启动程序,AvaloniaTest为Avalonia的核心业务实现层。这里模版给我们做了一个分离,其实写一起也是没有问题的。
运行代码如下:
代码分析
项目结构树展开如下:
Program.cs
using System;
using Avalonia;
using Avalonia.ReactiveUI;
namespace AvaloniaTest.Desktop;
class Program
{
// Initialization code. Don't use any Avalonia, third-party APIs or any
// SynchronizationContext-reliant code before AppMain is called: things aren't initialized
// yet and stuff might break.
[STAThread]
public static void Main(string[] args) => BuildAvaloniaApp()
.StartWithClassicDesktopLifetime(args);
// Avalonia configuration, don't remove; also used by visual designer.
public static AppBuilder BuildAvaloniaApp()
=> AppBuilder.Configure<App>()
.UsePlatformDetect()
.WithInterFont()
.LogToTrace()
.UseReactiveUI();
}
这里就是用Avalonia 的 AppBuilder配置了一下应用,包括配置App启动类启用平台保护,日志还有就是ReactiveUI等操作,最后调用StartWithClassicDesktopLifetime来设置当前应用的生命周期。
App.axaml
using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;
using AvaloniaTest.ViewModels;
using AvaloniaTest.Views;
namespace AvaloniaTest;
public partial class App : Application
{
public override void Initialize()
{
AvaloniaXamlLoader.Load(this);
}
public override void OnFrameworkInitializationCompleted()
{
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
desktop.MainWindow = new MainWindow
{
DataContext = new MainViewModel()
};
}
else if (ApplicationLifetime is ISingleViewApplicationLifetime singleViewPlatform)
{
singleViewPlatform.MainView = new MainView
{
DataContext = new MainViewModel()
};
}
base.OnFrameworkInitializationCompleted();
}
}
OnFrameworkInitializationCompleted
这里头是设置了Window和ViewModel的绑定。
AvaloniaXamlLoader.Load(this);
将当前页面加入到 Avalonia的组件库里面去。