解决WPF+Avalonia在openKylin系统下默认字体问题

这篇具有很好参考价值的文章主要介绍了解决WPF+Avalonia在openKylin系统下默认字体问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、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的平台。

解决WPF+Avalonia在openKylin系统下默认字体问题

 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的开发工具,然后在顶部菜单==>扩展中打开管理扩展,安装以下两个插件(注意版本)。

解决WPF+Avalonia在openKylin系统下默认字体问题

四、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环境没有问题。

解决WPF+Avalonia在openKylin系统下默认字体问题

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

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

解决WPF+Avalonia在openKylin系统下默认字体问题

解决WPF+Avalonia在openKylin系统下默认字体问题

解决WPF+Avalonia在openKylin系统下默认字体问题

解决WPF+Avalonia在openKylin系统下默认字体问题

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

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

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

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

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

解决WPF+Avalonia在openKylin系统下默认字体问题

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

dotnet StudyAvalonia.Desktop.dll

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

 解决WPF+Avalonia在openKylin系统下默认字体问题

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

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

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

解决WPF+Avalonia在openKylin系统下默认字体问题

这里记得把字体文件设置为AvaloniaResource

解决WPF+Avalonia在openKylin系统下默认字体问题

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

解决WPF+Avalonia在openKylin系统下默认字体问题

 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系统中,重新运行,就可以看到可以正常的跑起来了,界面显示中文没有问题了。

解决WPF+Avalonia在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文章来源地址https://www.toymoban.com/news/detail-712134.html

到了这里,关于解决WPF+Avalonia在openKylin系统下默认字体问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • android 13.0 添加系统字体并且设置为默认字体

    在13.0系统定制化开发中,在产品定制中,有产品需求对于系统字体风格不太满意,所以想要更换系统的默认字体,对于系统字体的修改也是常有的功能,而系统默认也支持增加字体,所以就来添加楷体字体为系统字体,并替换为系统默认字体, 接下来就来分析下替换默认字

    2024年02月22日
    浏览(65)
  • Unity TextMeshPro解决中文乱码以及修改默认字体

    (自学unity问题产生及解决记录贴) 环境及版本:windows,unity 2021.3.20f1c1 一、创建TextMeshPro输入中文产生乱码 问题:TextMeshPro中文显示乱码 解决方法: 使用系统自带字体 在C:WindowsFonts路径下找一个字体,以微软雅黑为例,复制到unity目录下(unity项目中,在project右键Show in E

    2023年04月12日
    浏览(56)
  • 如何在Avalonia11中设置自定义字体

    由于avalonia默认的中文字体显示的效果不太理想,我们需要下载一些自定义的字体,来优化UI的显示效果。avalonia的官方文档地址。 对我在项目中运用的自定义字体操作做一个记录和分享,希望对大家有帮助。对应的代码都在基于Avalonia的GPT的AI会话项目用应用。采用的是最新

    2024年02月15日
    浏览(59)
  • 解决win10特殊符号乱码问题 显示方块、口。恢复系统字体注册表

    图片记录 系统:WIN10 LTSC U盘写入winpe 备份好的系统的字体 C:/Windows/Fonts(我是虚拟机中安装了windows系统,备份的) 进入winpe,删除原Fonts文件夹,复制刚备份的字体文件 1.备份好的系统的字体 C:/Windows/Fonts 2.打开该文件夹安装所有Segoe 的相关字体 删除此注册表,然后再导入备

    2024年02月11日
    浏览(85)
  • Docker 修改默认存储路径,解决系统盘占用100%问题

    一、查看存储路径是否在系统盘 输出结果: 二、迁移并修改配置  

    2024年02月15日
    浏览(45)
  • WPF向Avalonia迁移(四、其他事项)

    开发必备 1. Avalonia项目源代码!!!!!!!!!!没有源代码,你连控件的背景色怎么改都找不着!! 2.下载你所使用的版本!!!!!!!!!0.10.XX与0.11.XX 差很多!!!!要看好自己用的版本号 3.如果你使用了其他的UI库,比如说Semi.Avalonia,下载对应版本的源代码,改

    2024年02月07日
    浏览(79)
  • 适用于 Linux 的 WPF:Avalonia

    许多年前,在 WPF 成为“Windows Presentation Foundation”并将 XAML 作为 .NET、Windows 等的 UI 标记语言引入之前,有一个代号为“Avalon”的项目。Avalon 是 WPF 的代号。XAML 现在无处不在,XAML 标准是一个词汇规范。 Avalonia 是一个开源项目,它显然从 Avalon 中汲取灵感,并且对 XAML 有着毫

    2024年02月05日
    浏览(53)
  • WPF向Avalonia迁移(三、项目结构)

    前提: Avalonia版本11.0.0 1.配置文件 1.1 添加配置文件 1.2 读取配置文件  添加System.Configuration.ConfigurationManager 2.样式 2.1 添加样式文件至Assets文件夹下  2.2 引用样式        打开App.axaml文件,添加StyleInclude Source=\\\"你要用的样式文件.axaml\\\"/,添加后该样式在整个应用生效。 3.资源

    2024年02月07日
    浏览(66)
  • Avalonia UI跨平台WPF

    Avalonia是一个强大的框架,使开发人员能够使用.NET创建跨平台应用程序。 它使用自己的渲染引擎绘制UI控件,确保在Windows、macOS、Linux、Android、iOS和WebAssembly等不同平台上具有一致的外观和行为。 官网链接: 官网链接 文档链接: 中文文档

    2024年04月27日
    浏览(53)
  • WPF向Avalonia迁移(一、一些通用迁移项目)

    WPF:Visibility  其他参考文档 WPF: Avalonia : WPF:Style 开发文档 WPF: Avalonia :开发文档 ,样式设计加入了类似加入了CSS选择器的语法 控件迁移 参考文档        大多常用控件都是可以无缝迁移的,少数像RichTextBox这样的控件,Avalonia是没有的,但是影响不大。 其他 参考文

    2024年02月07日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包