【转】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 树形表格(免费旧版)

如果你需要,我可以再增加:

  1. DataGrid 示例代码(绑定列表数据)
  2. TreeDataGrid 树形表格示例
  3. 打包为deb安装包脚本,直接在UOS/麒麟安装

 

posted on 2026-09-04 15:56  z5337  阅读(21)  评论(0)    收藏  举报