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

程序员有二十年 2024-09-12 10:29:04

最近在搞一个国产麒麟系统的接口对接,因为,接口内含复杂的签名验证,而且还是离线环境,所以,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

如何获取字体的家族名字

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

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

点击 element,选择 font info

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

引入离线字体

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

public static AvaloniaAppBuilderExtensions{public static AppBuilder UseFontAlibaba([Disallow] 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 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 PuHuiTifonts: //字体标识AvaloniaApplication1FontFamilies# //自定义字体家族Alibaba PuHuiTi //字体家族名称 Alibaba PuHuiTi 3.0 65 Medium (Alibaba PuHuiTi )就可以了修改后,重新发布麒麟

可以看到已经能运行了。

git地址https://github.com/kesshei/AvaloniaDemohttps://gitee.com/kesshei/AvaloniaDemo资源链接https://www.alibabafonts.com/#/fonthttps://fontforge.org/en-US/downloads/windows-dl/参考链接https://www.cnblogs.com/wdw984/p/17717864.html

0 阅读:0

程序员有二十年

简介:感谢大家的关注