经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » 编程经验 » 查看文章
解决Avalonia 11.X版本的中文字体问题
来源:cnblogs  作者:yunxizfj  时间:2023/8/11 8:38:53  对本文有异议

网上搜索的方法使用接口“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. <!--Avalonia doesen't support TrimMode=link currently,but we are working on that https://github.com/AvaloniaUI/Avalonia/issues/6892 -->
  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. <!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
  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. <!--<FluentTheme />-->
  6. <SimpleTheme />
  7. <Style Selector="Window">
  8. <Setter Property="FontFamily" Value="../Assets/Fonts/msyh.ttf#Microsoft YaHei"/>
  9. </Style>
  10. </Application.Styles>
  11. </Application>

第三步,在主窗体随便整点中文的显示就行了,我这整点文本显示,参考如下代码:

  1. <Window xmlns="https://github.com/avaloniaui"
  2. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  3. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  4. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  5. mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
  6. x:Class="Avalonia11Test.MainWindow"
  7. Title="Avalonia11Test">
  8. <StackPanel>
  9. <CheckBox Name="cbtn" Content="Welcome to 阿威罗尼亚!" FontSize="20" />
  10. <Button Click="Open" Content="打开" Width="100" Height="25"/>
  11. <StackPanel>
  12. <TextBlock Text="你好" FontWeight="Regular" FontSize="15"/>
  13. <TextBlock Text="你好" FontWeight="Bold" FontSize="25"/>
  14. <TextBlock Text="你好" FontWeight="UltraBold" FontSize="35"/>
  15. </StackPanel>
  16. </StackPanel>
  17. </Window>

 

第四步,发布!我懒,我没在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/p/17617992.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号