当前位置: 首页 > article >正文

Avaloia 实现国产麒麟系统中文显示界面

最近在搞一个国产麒麟系统的接口对接,因为,接口内含复杂的签名验证,而且还是离线环境,所以,postman不是很好用。

就想着哪个方式好一些,主要是有选择图片的操作,所以,在Electron和Avalonia中做选择,其他的很少支持linux系统的。

综合考虑还是选择Avalonia,毕竟原生开发,xaml也跟WPF基本一致,所以,就来个Avalonia做了,试了下效果还是很不错的。

这里只做一个简单的窗体,能在麒麟桌面跑,其他的可以参考WPF。

Avaloia安装

打开 Visual Studio 2022 选择扩展菜单

选择扩展管理器

在扩展管理器里输入 Avalonia 关键词,然后把扩展都安装了。

然后,选择安装,就会显示下面,安装程序(需要关闭vs才可以,重复两次)

安装完毕会显示成功信息。

创建 Avaloia 项目

先新建 Avaloia c# Project项目,作为默认项目。

我这边默认选择桌面应用。

这个设计模式(design pattern) 分为了两种,实际上就是MVVM的实现方式吧,ReactiveUI和Community toolkit,相对来讲,community toolkit应该跟WPF差不多,我就选择了这个。


剩下的都选应该也没啥问题,都是绑定了,资源嵌入之类的。

创建完就是下面这个项目,整体结构简单,也不复杂。

我们F5 ,运行起来项目,是这样的,我增加了点中文显示。

部署到麒麟系统

项目右键发布,我设置了以下相关配置。

把生成的文件直接复制到目标系统上

麒麟系统信息

运行项目

直接双击 AvaloniaApplication1.Desktop 会打开 文本编辑器。

所以,我们需要修改名称为 AvaloniaApplication1,然后,授予执行权限就可以运行了.

双击应用,选择直接运行。

然后会发现,什么都没有,太不正常了。

这个时候只能命令行执行


真是出现了异常,大概意思是字体异常。

字体异常处理

在linux上不一定有默认的字体,那么,就需要导入相关字体,这里我选择了阿里云的商用免费字体。

访问 https://www.alibabafonts.com/#/font,下载你喜欢的字体

下载完后,大致是这个东西


只选择.ttf格式的文件就可以了,如下图所示

放到资源文件夹里,就像这样,我只放了一个,放的多,文件就越大。

还需要设置资源的嵌入类型,为 AvaloniaResource

如何获取字体的家族名字

需要一个工具叫做 FontForge
下载地址: https://fontforge.org/en-US/downloads/windows-dl/

运行程序,选择你的字体文件


点击ok,就可以打开这个界面

点击 element,选择 font info

就可以看到字体的相关信息了

引入离线字体

需要在入口处增加字体扩展

public static class AvaloniaAppBuilderExtensions
{
    public static AppBuilder UseFontAlibaba([DisallowNull] this AppBuilder builder, Action<FontSettings>? configDelegate = default)
    {
        var setting = new FontSettings();
        configDelegate?.Invoke(setting);

        return builder.With(new FontManagerOptions
        {
            DefaultFamilyName = setting.DefaultFontFamily,
            FontFallbacks = new[]
            {
                new FontFallback
                {
                    FontFamily = new FontFamily(setting.DefaultFontFamily)
                }
            }
        }).ConfigureFonts(manager => manager.AddFontCollection(new EmbeddedFontCollection(setting.Key, setting.Source)));
    }
    public class FontSettings
    {
        public string DefaultFontFamily = "fonts:AvaloniaApplication1FontFamilies#Alibaba PuHuiTi";
        public Uri Key { get; set; } = new Uri("fonts:AvaloniaApplication1FontFamilies", UriKind.Absolute);
        public Uri Source { get; set; } = new Uri("avares://AvaloniaApplication1/Assets/Fonts", UriKind.Absolute);
    }
}

然后,在此处引用即可,其中 DefaultFontFamily 的内容,我并没有深入,大体分为了三部分

fonts:AvaloniaApplication1FontFamilies#Alibaba PuHuiTi

fonts:  //字体标识
AvaloniaApplication1FontFamilies#   //自定义字体家族
Alibaba PuHuiTi //字体家族名称 Alibaba PuHuiTi 3.0 65 Medium (Alibaba PuHuiTi )就可以了

修改后,重新发布麒麟

可以看到已经能运行了。

git地址

https://github.com/kesshei/AvaloniaDemo
https://gitee.com/kesshei/AvaloniaDemo

资源链接

https://www.alibabafonts.com/#/font
https://fontforge.org/en-US/downloads/windows-dl/

参考链接

https://www.cnblogs.com/wdw984/p/17717864.html

http://www.kler.cn/a/299789.html

相关文章:

  • 计算机毕业设计Python+CNN卷积神经网络高考推荐系统 高考分数线预测 高考爬虫 协同过滤推荐算法 Vue.js Django Hadoop 大数据毕设
  • 【教学类-89-01】20250127新年篇01—— 蛇年红包(WORD模版)
  • CAG技术:提升LLM响应速度与质量
  • 机器人抓取与操作经典规划算法(深蓝)——2
  • XSS 漏洞全面解析:原理、危害与防范
  • 判断子序列
  • Node.js 多版本安装与切换指南
  • 又一个iPhone时代开始
  • 【系统架构设计师】状态模式
  • etl文件性能分析
  • Android 蓝牙三方和动态权限三方
  • Netty中用到了哪些设计模式
  • 机器学习,深度学习,AGI,AI的概念和区别
  • git使用基础教程
  • 【系统架构设计师】享元模式
  • 机器学习中的聚类艺术:探索数据的隐秘之美
  • 【视频讲解】Python贝叶斯卷积神经网络分类胸部X光图像数据集实例
  • 3D技术在电商行业的应用有哪些?
  • 大厂中秋福利哪家强?字节发被子,京东联名三星堆!网友:最强的还是我们......
  • SpringBoot打包部署,打包成jar和war有所不同?
  • 人工智能领域的AGI指的是什么?
  • Kotlin 特性之扩展函数
  • 【Linux系统学习】2.Linux基础命令
  • C++那些事之精选68道面试题
  • 部署若依Spring boot项目
  • 分享 6 款在日常电脑办公中频繁使用的软件