一、openKylin简介

openKylin(开放麒麟) 社区是在开源、自愿、平等和协作的基础上,由基础软硬件企业、非营利性组织、社团组织、高等院校、科研机构和个人开发者共同创立的一个开源社区,致力于通过开源、开放的社区合作,构建桌面操作系统开源社区,推动Linux开源技术及其软硬件生态繁荣发展。

“开放麒麟”(openKylin)是中国首个桌面操作系统开发者平台,由国家工业信息安全发展研究中心等单位联合成立,通过开放操作系统源代码的方式打造具有自主创新技术的开源桌面操作系统。

系统镜像下载地址:https://www.openkylin.top/downloads/index-cn.html

二、Avalonia简介(https://avaloniaui.net/)

Avalonia是一个跨平台的.NET框架,用于构建漂亮、现代的图形用户界面(GUI)。

使用Avalonia,您可以从单个代码库创建适用于Windows、macOS、 Linux、iOS、Android和Web Assembly的原生应用程序。

Avalonia兼容所有支持.NET Standard 2.0的平台。

Avalonia官方支持下列平台:

  •  Windows 8 及更高版本(虽然它也能在Windows 7上正常工作)
  •  macOS High Sierra 10.13 及更高版本
在Linux上,下列发行版支持Avalonia:
  • Debian 9 (Stretch) 及更高版本
  • Ubuntu 16.04 及更高版本
  •  Fedora 30 及更高版本

Avalonia11版本的中文官方文档地址:https://docs.avaloniaui.net/zh-Hans/docs/next/welcome

随着信创、操作系统国产化替换的推广进程,一些客户端项目也会有需要转移到Linux桌面的巨大的市场需求。

目前Linux下桌面程序开发的常见工具的有:QT、Electron、Blazor。而现在WPF有了Avalonia的加持,势必会在开发原生跨平台应用时更具有优势和性价比。

三、VS2022安装Avalonia开发插件

首先要安装visual studio2022的开发工具,然后在顶部菜单==>扩展中打开管理扩展,安装以下两个插件(注意版本)。

四、openKylin安装.NET Core环境

在openKylin官方网站上下载镜像后,可用虚拟机进行安装,安装后进入到桌面,然后根据微软官方安装教程:https://learn.microsoft.com/zh-cn/dotnet/core/install/linux通过脚本或者下载手动安装的方法进行安装.NET Core环境。

需要注意的是,openKylin建立的登录账户不具备root权限,所以在安装完成后需要配置以下环境变量,否则运行dotnet时会提示没有这个命令提示。

具体方法是打开一个终端,然后输入

sudo -s

输入密码回车,然后终端会变成root权限的终端,接着输入下面命令后回车

vim /etc/profile

会打开一个编辑界面,我们按键盘的i键进入编辑模式,然后到文档最后插入一行,输入安装完.NET Core环境后提示的PATH路径,比如:

exprot PATH=$PATH:/home/操作系统登录名/.dotnet

然后按esc,输入:wq回车,保存退出。随后重启OpenKylin系统,重启后进入到桌面,打开终端,输入

dotnet --info

回车,看到.NET Core的输出信息,证明安装和配置.NET Core环境没有问题。

五、使用VS2022建立Avalonia桌面项目

在安装完Avalonia插件和模板后,我们在创建新的项目的时候,可以直接搜索avalonia关键字,直接创建一个Avalonia C# Project,会有创建向导,按照向导提示一步一步创建完毕。

点击Create按钮后,稍等片刻即可完成项目创建,我们把创建的带Desktop结尾的项目设置为启动项目,然后我们直接F5运行项目,没有意外的话会看到一个界面,一句英文提示。

六、解决Avalonia桌面项目在openKylin下报Default font name can't be null or empty的问题

我们把ViewModels\MainViewModel.cs把英文的文字改成中英混合的文字。

public string Greeting => "欢迎使用 Avalonia!";

点击顶部菜单的生成==>发布选定内容,目标运行时选linux-x64,然后发布项目。

发布成功后,我们把项目复制粘贴到openKylin的环境下,然后在终端中定位到项目目录,运行

dotnet StudyAvalonia.Desktop.dll

会看到经典的 Default font name can't be null or empty. 的错误提示:

可见目前它对中文Linux系统的默认字体支持不太好,有的解决办法是给操作系统设置为英文,但我们国产系统目标群体绝大部分都需要使用中文环境。因此我们在开发项目时自己指定一下项目要用的默认字体来解决这个问题。

这里我们选用阿里巴巴的免费可商用的字体==>阿里巴巴普惠体:https://www.alibabafonts.com/#/font

下载后按照下面目录结构放入字体文件(也可自定义其它路径,只要代码中的路径做出对应调整即可)

在Desktop项目中新建两个类文件

FontSettings.cs

public class FontSettings
{
public string DefaultFontFamily = "fonts:MyDesignFontFamilies#Alibaba PuHuiTi 2.0";
public Uri Key { get; set; } = new Uri("fonts:MyDesignFontFamilies", UriKind.Absolute);
public Uri Source { get; set; } = new Uri("avares://StudyAvalonia.Desktop/Assets/Fonts/AliBaba", UriKind.Absolute);
}

AvaloniaAppBuilderExtensions.cs

 1 public static class AvaloniaAppBuilderExtensions
2 {
3 public static AppBuilder UseFontAlibaba([DisallowNull] this AppBuilder builder, Action<FontSettings>? configDelegate = default)
4 {
5 var setting = new FontSettings();
6 configDelegate?.Invoke(setting);
7
8 return builder.With(new FontManagerOptions
9 {
10 DefaultFamilyName = setting.DefaultFontFamily,
11 FontFallbacks = new[]
12 {
13 new FontFallback
14 {
15 FontFamily = new FontFamily(setting.DefaultFontFamily)
16 }
17 }
18 }).ConfigureFonts(manager => manager.AddFontCollection(new EmbeddedFontCollection(setting.Key, setting.Source)));
19 }
20 }

在Program.cs中注册一下新建的AppBuilder(.UseFontAlibaba())

 1 class Program
2 {
3 // Initialization code. Don't use any Avalonia, third-party APIs or any
4 // SynchronizationContext-reliant code before AppMain is called: things aren't initialized
5 // yet and stuff might break.
6 [STAThread]
7 public static void Main(string[] args) => BuildAvaloniaApp()
8 .StartWithClassicDesktopLifetime(args);
9
10 // Avalonia configuration, don't remove; also used by visual designer.
11 public static AppBuilder BuildAvaloniaApp()
12 => AppBuilder.Configure<App>()
13 .UsePlatformDetect()
14 .UseFontAlibaba()
15 .WithInterFont()
16 .LogToTrace()
17 .UseReactiveUI();
18 }

然后在编译发布项目,复制到OpenKylin系统中,重新运行,就可以看到可以正常的跑起来了,界面显示中文没有问题了。

七、鸣谢:

https://www.raokun.top/archives/ru-he-zai-avalonia11-zhong-she-zhi-zi-ding-yi-zi-ti

https://github.com/MicroSugarDeveloperOrg/AntDesign.Avalonia

八、转载请注明来源:https://www.cnblogs.com/wdw984/p/17717864.html

解决WPF+Avalonia在openKylin系统下默认字体问题的更多相关文章

  1. 很简单的在Ubuntu系统下安装字体和切换默认字体的方法

    摘要: Ubuntu系统安装好后,默认字体对于中文的支持看上去不太美丽,于是很多朋友可能需要设置系统的默认字体为自己喜欢的字体.本文主要介绍如何解决这两个问题. 说明:测试系统是Ubuntu14.04 ...

  2. WPF 精修篇 获取系统颜色和字体样式

    原文:WPF 精修篇 获取系统颜色和字体样式 看效果 <Grid> <Rectangle Fill="{DynamicResource {x:Static SystemCo ...

  3. Qt在Linux环境下应用程序字体模糊的解决方法(先改成使用默认字体,然后使用qtconfig配置)

    这两天一直在用Qt实现一个跨平台的软件.软件之前在Windows上编写的,后来放到里Ubuntu 10.10下编译.程序运行时遇到一个很棘手的问题,界面文本非常模糊.后来在网上查阅了好几天的资料,经历 ...

  4. 解决Windows 与Mac 双系统下的蓝牙设备共用的问题

    不知道有多少人和我一样用的蓝牙鼠标或者键盘,有的话应该都会遇到同一个问题:即在一个系统下配好对后在另一个系统必须重新配对才能使用,很是麻烦.还要将蓝牙设备进入发现模式,OS下搜索,连接....终于昨天 ...

  5. Ubuntu系统下安装字体和切换默认字体的方法

    参考链接:http://my.oschina.net/itblog/blog/278566 打开Ubuntu的软件中心,搜索:tweak,安装[Unity Tweak Tool]这款软件,如图(由于我 ...

  6. 修改MAC系统下默认PHP版本(解决自带版本和环境版本冲突)

    https://www.jianshu.com/p/d080d06557be 更改环境变量来修改默认的php版本 新建一个.bas_profile文件并编辑 vim ~/.bash_profile 然 ...

  7. 修改linux(kali)和windows双系统下默认启动系统和启动延时

    我的公众号,正在建设中,欢迎关注: windows和kali双系统安装完成后kali是默认的启动系统,现将windows设置为默认启动系统并更改选择系统等待时间 1.开机时当运行到系统选择菜单时记下w ...

  8. 光驱在资源管理器显示黄色感叹号的解决方法BIOS内有 系统下没有

    1. 点开“开始”-运行regedit.exe,进入注册表编辑器,到左边的项目栏里找到HKEY_LOCAL_MACHINE\SYSTEM \CurrentControlSet\Control\Clas ...

  9. matplotlib在MAC系统下中文字体显示问题

    最近想把部分python数据分析的代码从win系统迁移到MAC上,有部分图片上涉及中文显示,迁移到MAC上warning: UserWarning: findfont: Font family [u' ...

  10. itext生成pdf如何使用windows系统下的各种字体

    一.首先是,使用windows字体的正常方式. @Test /** * 使用windows系统下的字体,new Font方式 */ public void test1_1() throws Docum ...

随机推荐

  1. 面向生信分析的高性 RStudio 服务器

    因需要超大内存的拼接/比对/表达量计算发愁? 为了使用组里的服务器而被困在实验室? 浪费大量的时间龟速下载 NCBI 的数据? 快来看看云筏 HPC 吧! https://my.cloudraft.c ...

  2. Git 多账号配置

    本地登录多账号并连接对应的远程仓库,主要就是 密钥配对,我这里刚开始配了密钥也将密钥复制到ssh但是还是连接不到第二个远程仓库,后来发现是需要 密钥代理 1.在当前项目下更改git账号信息: git ...

  3. Pinot2的无人机创新和发展

    目录 1. 引言 2. 技术原理及概念 2.1 基本概念解释 2.2 技术原理介绍 2.3 相关技术比较 3. 实现步骤与流程 3.1 准备工作:环境配置与依赖安装 3.2 核心模块实现 3.3 集成 ...

  4. FPGA加速技术:如何提高系统的可编程性和灵活性

    目录 <23. FPGA加速技术:如何提高系统的可编程性和灵活性> 一.引言 随着人工智能.物联网等新技术的快速发展,对计算资源和处理能力的需求不断增加.为了加速计算流程和提高系统的性能, ...

  5. 记一次 .NET 某埋线管理系统 崩溃分析

    一:背景 1. 讲故事 经常有朋友跟我反馈,说看你的文章就像看天书一样,有没有一些简单入手的dump 让我们先找找感觉,哈哈,今天就给大家带来一篇入门级的案例,这里的入门是从 WinDbg 的角度来阐 ...

  6. Logistic Regression and its Maximum Likelihood Estimation

    从 Linear Regression 到 Logistic Regression 给定二维样本数据集 \(D = \left\{ (\vec{x}_{1}, y_{1}), (\vec{x}_{2} ...

  7. iota简介

    当声明枚举类型或定义一组相关常量时,Go语言中的iota关键字可以帮助我们简化代码并自动生成递增的值.本文档将详细介绍iota的用法和行为. iota关键字 iota是Go语言中的一个预定义标识符,它 ...

  8. Struts2 小知识点

    配置struts.xml文件,选择开发模式 在实际应用开发或者是产品部署的时候,对应着两种模式: 开发模式(devMode):此时 DevMode=ture: 产品模式(proMode):此时 Dev ...

  9. iostream,iostream.h,stdio.h的纠葛

    include <iostream.h>非标准输入输出流 include 标准输入输出流 C++中为了避免名字定义冲突,特别引入了"名字空间的定义",即namespac ...

  10. 如何新建一个django项目

    1.新建项目 2选择django 3.接下来我们进入 djangotest目录输入以下命令,启动服务器: python manage.py runserver 0.0.0.0:8000 0.0.0.0 ...