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

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

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

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

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

Avaloia安装

打开 Visual Studio 2022 选择扩展菜单

8da7224c10fbe93537c12d820e09edd6.png

选择扩展管理器

09d628cd6c4e900ed8314c910f048a13.png

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

48a0137cfbec5a27cfc7b7abbe0f79ae.png

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

acb52a21b0dceaf4c2d248bb57b2b866.png

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

2707b553435fb1115529d38b0c5c90c3.png

创建 Avaloia 项目

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

ddcfbbd78b3ee5018808a4ecc25b280a.png

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

c3ad98eac56403139553cf81c6670353.png

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

f1f70cabab9fcef67209c75585e320da.png

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

f4609dcdc327c6787b0110c4b69c52ab.png

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

e063d09af6b895626123a1bf36911f01.png

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

779612afe7ec16cec60af0fd1cf4876a.png

部署到麒麟系统

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

e1bdc8d594e1fbe01af2d46392937749.png

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

14b3b075de1afe3fea14e303b1b3fa1e.png

麒麟系统信息

229544b8874f15e5af1bd69d9c993864.png

运行项目

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

3528a026930a421763da76c8ea655f1b.png

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

b418bf4c389921e7d61c5bdb3f35365c.png

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

3f1e9511f26de198e868bcd7ab91404b.png

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

这个时候只能命令行执行

d992aebff970bd95eb2fab0817a88c0e.png

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

字体异常处理

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

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

4f1226d929bfbc774e6ecca25363b461.png

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

a7940e149c0e1ec37bac919fb50647ea.png

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

970f100e959093f2ef2bb26a53ac539e.png

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

2169dd6153e03aec25111ae886e7cd60.png

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

4d824b3852a28570fa272c50c4f779c0.png

如何获取字体的家族名字

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

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

9da734fbf2c01900e0313a9de89c129e.png

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

ef8733179d4a32d12abf95f7185d0587.png

点击 element,选择 font info

13c4996279e0853b3a01229c63806662.png

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

cd8a2964dbfa84a5b1721fbb29d31c57.png

引入离线字体

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

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 )就可以了
b325ca2a2db66c3d42c614c675a0a1b6.png

修改后,重新发布麒麟

可以看到已经能运行了。

0c20053f8e932a3a4fa9bc686ef3a044.png

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值