## 前言: 上一篇分分享了[基於阿裡雲實現的簡訊驗證碼](https://www.cnblogs.com/wml-it/p/17613232.html)文章,考慮到為了防止登錄時,非人工操作,頻繁獲取驗證碼,趁熱打鐵,現在添加了圖片驗證碼服務功能。借鑒網上傳統的做法,把實現這兩個驗證的功能做成有個 ...
網上搜索的方法使用介面“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,項目文件內容如下所示:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>net6.0</TargetFramework> <Nullable>enable</Nullable> <!--Avalonia doesen't support TrimMode=link currently,but we are working on that https://github.com/AvaloniaUI/Avalonia/issues/6892 --> <TrimMode>copyused</TrimMode> <BuiltInComInteropSupport>true</BuiltInComInteropSupport> </PropertyGroup> <ItemGroup> <None Remove=".gitignore" /> <None Remove="Assets\Fonts\msyh.ttf" /> </ItemGroup> <ItemGroup> <AvaloniaResource Include="Assets\Fonts\msyh.ttf" /> </ItemGroup> <ItemGroup> <PackageReference Include="Avalonia" Version="11.0.2" /> <PackageReference Include="Avalonia.Desktop" Version="11.0.2" /> <PackageReference Include="Avalonia.Themes.Fluent" Version="11.0.2" /> <PackageReference Include="Avalonia.Themes.Simple" Version="11.0.2" /> <PackageReference Include="Avalonia.Markup.Xaml.Loader" Version="11.0.2" /> <PackageReference Include="Avalonia.ReactiveUI" Version="11.0.2" /> <!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.--> <PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.0.2" /> </ItemGroup> </Project>
第二步,在網上去搜索下載你所需的中文字體,我這用的微軟雅黑字體,放入項目,然後設置為AvaloniaResource,可以參加第一步項目文件內容。
第三步,在App.axaml文件添加字體資源使用,直接用選擇器選擇窗體,就行了,參考如下代碼:
<Application xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="Avalonia11Test.App"> <Application.Styles> <!--<FluentTheme />--> <SimpleTheme /> <Style Selector="Window"> <Setter Property="FontFamily" Value="../Assets/Fonts/msyh.ttf#Microsoft YaHei"/> </Style> </Application.Styles> </Application>
第三步,在主窗體隨便整點中文的顯示就行了,我這整點文本顯示,參考如下代碼:
<Window xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="Avalonia11Test.MainWindow" Title="Avalonia11Test"> <StackPanel> <CheckBox Name="cbtn" Content="Welcome to 阿威羅尼亞!" FontSize="20" /> <Button Click="Open" Content="打開" Width="100" Height="25"/> <StackPanel> <TextBlock Text="你好" FontWeight="Regular" FontSize="15"/> <TextBlock Text="你好" FontWeight="Bold" FontSize="25"/> <TextBlock Text="你好" FontWeight="UltraBold" FontSize="35"/> </StackPanel> </StackPanel> </Window>
第四步,發佈!我懶,我沒在linux安裝net sdk,所以我在這直接就選擇文件夾發佈,參數設置為獨立框架+獨立文件。
第五步,把文件複製到linux系統,根據官方的說法中文字體是來源於skia底層,所以uno也會出現,需要設置一下系統LC_CTYPE的變數,所以安裝官方的指示,創建一個sh腳本,內容參考如下:
#! export LC_CTYPE=en_US.UTF-8 && ./Avalonia11Test
最後,就把sh腳本使用sudo chmod提升一下許可權,執行./你的sh 大功告成!
這是沒有使用該方法直接執行的效果圖:
這是使用了該方法的運行圖:
在國產系統上做開發,在當前QT大行其道的情況下,一個來自搞了很多年NET程式員的倔強,特別是JG行業