惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
Stack Overflow Blog
Stack Overflow Blog
G
Google Developers Blog
Microsoft Azure Blog
Microsoft Azure Blog
Engineering at Meta
Engineering at Meta
L
LangChain Blog
T
The Blog of Author Tim Ferriss
J
Java Code Geeks
Y
Y Combinator Blog
月光博客
月光博客
雷峰网
雷峰网
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
F
Fortinet All Blogs
A
About on SuperTechFans
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
P
Proofpoint News Feed
小众软件
小众软件
H
Help Net Security
Last Week in AI
Last Week in AI
B
Blog RSS Feed
宝玉的分享
宝玉的分享
N
Netflix TechBlog - Medium
博客园 - 叶小钗
The GitHub Blog
The GitHub Blog

博客园 - z5337

【转】禁用 Chrome 浏览器的自动更新 【转】Avalonia 周边介绍 【转】国产操作系统对 Avalonia 的支持情况 【转】国产操作系统优化篇 [openKylin] 入门知识点 【转】国产操作系统优化篇 [openKylin] 第一步 - Qt + VMware 【转】p2055dn 打印机配置 IP 地址 【转】Windows 锁屏后屏幕不熄灭排查 【转】既然 java 8 因为组件容易被攻击,.net core 也有大量第三方组件,是不是也容易出问题 【转】最小 web api 学习 【转】使用记事本区分图片格式 【转】蓝牙耳机的播放控制 【转】JoyToKey 键位映射 【转】[C#] 要从接口取时间,单个订单查询和批量查询,写一个接口还是两个接口合适? 【转】[C#] Web API 中的常见层次 【转】[C#] .net core 项目的目标框架设置 【转】[C#] 项目里的配置文件与选项对比 【转】[C#] GlobalUsing 的使用 【转】[.net core] 项目的 Windows 服务器部署 【转】《三字经》全文 【转】[IDEA] 调试时怎么判断使用哪个配置文件 【转】PO、DO、VO、BO、DTO、DAO、POJO 的区别 【转】[web]怎么移除网页最上层的水印 【转】[C#] 30+个.NET开发最佳实践 【转】[C#] WPF 保留选中的高亮色 【转】Windows Server 系统的桌面上显示 此电脑 图标 【转】[C#] 参数前加 in 的作用 【转】[C#] Enum 的 Flags 特性 【转】[C#] Tuples 元组介绍 【转】[C#] Record 的使用 【转】[C#] 预处理指令
【转】Avalonia 12 最小信创项目模板
z5337 · 2026-09-04 · via 博客园 - z5337

转自:豆包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/麒麟安装