【转】Avalonia 12 最小信创项目模板
转自:豆包AI
Avalonia 12 最小信创项目模板
项目信息:Avalonia 12.0.10 + .NET8 + Fluent主题 + CommunityToolkit.Mvvm + 全局中文字体修复 全部MIT开源依赖,不含任何Avalonia Pro商业组件,可直接编译发布到银河麒麟/统信UOS(x64/arm64/loongarch64)
1. 创建项目
先安装 Avalonia 模板:
dotnet new install Avalonia.Templates
新建桌面项目
dotnet new avalonia.app -n AvaloniaXinChuangDemo
cd AvaloniaXinChuangDemo
2. 编辑 AvaloniaXinChuangDemo.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<AvaloniaVersion>12.0.10</AvaloniaVersion>
</PropertyGroup>
<ItemGroup>
<!-- Avalonia核心 -->
<PackageReference Include="Avalonia" Version="12.0.10" />
<PackageReference Include="Avalonia.Desktop" Version="12.0.10" />
<PackageReference Include="Avalonia.Themes.Fluent" Version="12.0.10" />
<PackageReference Include="Avalonia.Fonts.Inter" Version="12.0.10" />
<!-- 基础DataGrid(MIT免费) -->
<PackageReference Include="Avalonia.Controls.DataGrid" Version="12.0.10" />
<!-- 免费旧版TreeDataGrid,⚠️ 包名不要写错 -->
<PackageReference Include="Avalonia.Controls.TreeDataGrid" Version="11.0.10" />
<!-- FluentAvalonia UI控件库(MIT) -->
<PackageReference Include="FluentAvalonia" Version="2.2.0" />
<!-- MVVM -->
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.2" />
</ItemGroup>
</Project>
3. App.axaml
<Application
x:Class="AvaloniaXinChuangDemo.App"
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Application.Styles>
<FluentTheme Mode="Light"/>
<StyleInclude Source="avares://FluentAvalonia/Styling/FluentAvaloniaTheme.axaml"/>
</Application.Styles>
</Application>
4. App.axaml.cs(全局字体修复,解决国产系统中文方块)
using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;
using Avalonia.Media;
namespace AvaloniaXinChuangDemo;
public partial class App : Application
{
public override void Initialize()
{
AvaloniaXamlLoader.Load(this);
// 全局字体回退:文泉驿黑体 → Noto思源黑体 → 思源黑体 → 黑体
Resources["FontFamily"] = new FontFamily("WenQuanYi Zen Hei,Noto Sans CJK SC,Source Han Sans CN,SimHei");
}
public override void OnFrameworkInitializationCompleted()
{
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
desktop.MainWindow = new MainWindow
{
DataContext = new MainWindowViewModel()
};
}
base.OnFrameworkInitializationCompleted();
}
}
5. MainWindow.axaml
<Window
x:Class="AvaloniaXinChuangDemo.MainWindow"
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:AvaloniaXinChuangDemo"
Title="信创Avalonia Demo"
Width="800" Height="500">
<Window.DataContext>
<vm:MainWindowViewModel />
</Window.DataContext>
<StackPanel Margin="30" Spacing="16">
<TextBlock Text="Avalonia 信创演示窗口" FontSize="24"/>
<TextBlock Text="中文测试:银河麒麟、统信UOS、龙芯/飞腾/兆芯" FontSize="16"/>
<Button Content="点我测试MVVM" Command="{Binding TestCmd}" />
<TextBlock Text="{Binding Message}" FontSize="16" Foreground="#2255bb"/>
</StackPanel>
</Window>
6. MainWindow.axaml.cs
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace AvaloniaXinChuangDemo;
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
7. MainWindowViewModel.cs(MVVM ViewModel)
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
namespace AvaloniaXinChuangDemo;
public partial class MainWindowViewModel : ObservableObject
{
[ObservableProperty]
private string _message = "等待点击按钮";
[RelayCommand]
private void Test()
{
Message = $"当前时间:{DateTime.Now:yyyy-MM-dd HH:mm:ss}";
}
}
编译 & 发布命令
# 本地调试运行
dotnet run
# 兆芯/海光 linux-x64 NativeAOT 单文件发布
dotnet publish -c Release -r linux-x64 --self-contained true /p:PublishAot=true
# 飞腾/鲲鹏 arm64
dotnet publish -c Release -r linux-arm64 --self-contained true /p:PublishAot=true
# 龙芯 loongarch64
dotnet publish -c Release -r linux-loongarch64 --self-contained true /p:PublishAot=true
部署到国产系统前置依赖(银河麒麟 / 统信UOS)
sudo apt install libgl1-mesa-dev libgbm-dev libinput-dev libx11-dev libxi-dev
⚠️ 登录系统时选择 X11会话,不要Wayland,规避剪贴板、窗口拖拽异常
可选扩展(按需加,全部MIT)
- Material.Avalonia 表单控件
- Material.Icons.Avalonia 字体图标
- Avalonia.Controls.TreeDataGrid 树形表格(免费旧版)
如果你需要,我可以再增加:
- DataGrid 示例代码(绑定列表数据)
- TreeDataGrid 树形表格示例
- 打包为deb安装包脚本,直接在UOS/麒麟安装
浙公网安备 33010602011771号