翼度科技»论坛 编程开发 .net 查看内容

解决Avalonia 11.X版本的中文字体问题

9

主题

9

帖子

27

积分

新手上路

Rank: 1

积分
27
网上搜索的方法使用接口“IFontManagerImpl”这个方法目前只能用于Avalonia 10.X版本,因为11版本后官方把这个接口的成员都设置成了非plubic,所以之前的版本解决办法用不上了,经过搜索github的官方那边的问题集锦,要解决解决Avalonia 11.X版本的中文字体问题有2个思路:
1.在程序里面嵌入TTF字体文件 2.把字体文件安装到linux系统,设置代码使用
这里我成功了第一种方法,运行环境:银河麒麟v10+net6.0+Avalonia 11.0.2+微软雅黑字体
 
第一步,创建项目:net6.0+Avalonia 11.0.2,项目文件内容如下所示:
  1. <Project Sdk="Microsoft.NET.Sdk">
  2.   <PropertyGroup>
  3.     <OutputType>WinExe</OutputType>
  4.     <TargetFramework>net6.0</TargetFramework>
  5.     <Nullable>enable</Nullable>
  6.    
  7.     <TrimMode>copyused</TrimMode>
  8.     <BuiltInComInteropSupport>true</BuiltInComInteropSupport>
  9.   </PropertyGroup>
  10.   <ItemGroup>
  11.     <None Remove=".gitignore" />
  12.     <None Remove="Assets\Fonts\msyh.ttf" />
  13.   </ItemGroup>
  14.   <ItemGroup>
  15.     <AvaloniaResource Include="Assets\Fonts\msyh.ttf" />
  16.   </ItemGroup>  
  17.   <ItemGroup>
  18.     <PackageReference Include="Avalonia" Version="11.0.2" />
  19.     <PackageReference Include="Avalonia.Desktop" Version="11.0.2" />
  20.       <PackageReference Include="Avalonia.Themes.Fluent" Version="11.0.2" />
  21.       <PackageReference Include="Avalonia.Themes.Simple" Version="11.0.2" />
  22.       <PackageReference Include="Avalonia.Markup.Xaml.Loader" Version="11.0.2" />
  23.       <PackageReference Include="Avalonia.ReactiveUI" Version="11.0.2" />
  24.    
  25.     <PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.0.2" />
  26.   </ItemGroup>
  27. </Project>
复制代码
第二步,在网上去搜索下载你所需的中文字体,我这用的微软雅黑字体,放入项目,然后设置为AvaloniaResource,可以参加第一步项目文件内容。
第三步,在App.axaml文件添加字体资源使用,直接用选择器选择窗体,就行了,参考如下代码:
  1. <Application xmlns="https://github.com/avaloniaui"
  2.              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  3.              x:Class="Avalonia11Test.App">
  4.     <Application.Styles>
  5.         
  6.         <SimpleTheme />
  7.         
  8.     </Application.Styles>
  9. </Application>
复制代码
第三步,在主窗体随便整点中文的显示就行了,我这整点文本显示,参考如下代码:
  1. <Application xmlns="https://github.com/avaloniaui"
  2.              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  3.              x:Class="Avalonia11Test.App">
  4.     <Application.Styles>
  5.         
  6.         <SimpleTheme />
  7.         
  8.     </Application.Styles>
  9. </Application><Application xmlns="https://github.com/avaloniaui"
  10.              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  11.              x:Class="Avalonia11Test.App">
  12.     <Application.Styles>
  13.         
  14.         <SimpleTheme />
  15.         
  16.     </Application.Styles>
  17. </Application>            
复制代码
 
第四步,发布!我懒,我没在linux安装net sdk,所以我在这直接就选择文件夹发布,参数设置为独立框架+独立文件。
第五步,把文件复制到linux系统,根据官方的说法中文字体是来源于skia底层,所以uno也会出现,需要设置一下系统LC_CTYPE的变量,所以安装官方的指示,创建一个sh脚本,内容参考如下:
  1. #!
  2. export LC_CTYPE=en_US.UTF-8 && ./Avalonia11Test
复制代码
最后,就把sh脚本使用sudo chmod提升一下权限,执行./你的sh 大功告成!
这是没有使用该方法直接执行的效果图:

 
这是使用了该方法的运行图:


 
在国产系统上做开发,在当前QT大行其道的情况下,一个来自搞了很多年NET程序员的倔强,特别是JG行业
 

来源:https://www.cnblogs.com/yunxizfj/archive/2023/08/09/17617992.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具