網(wǎng)上搜索的方法使用接口“IFontManagerImpl”這個(gè)方法目前只能用于Avalonia 10.X版本,因?yàn)?1版本后官方把這個(gè)接口的成員都設(shè)置成了非plubic,所以之前的版本解決辦法用不上了,經(jīng)過(guò)搜索github的官方那邊的問(wèn)題集錦,要解決解決Avalonia 11.X版本的中文字體問(wèn)題有2個(gè)思路:
1.在程序里面嵌入TTF字體文件 2.把字體文件安裝到linux系統(tǒng),設(shè)置代碼使用
這里我成功了第一種方法,運(yùn)行環(huán)境:銀河麒麟v10+net6.0+Avalonia 11.0.2+微軟雅黑字體
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-635827.html
第一步,創(chuàng)建項(xiàng)目:net6.0+Avalonia 11.0.2,項(xiàng)目文件內(nèi)容如下所示:
<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>
第二步,在網(wǎng)上去搜索下載你所需的中文字體,我這用的微軟雅黑字體,放入項(xiàng)目,然后設(shè)置為AvaloniaResource,可以參加第一步項(xiàng)目文件內(nèi)容。
第三步,在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>
第三步,在主窗體隨便整點(diǎn)中文的顯示就行了,我這整點(diǎn)文本顯示,參考如下代碼:
<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="打開(kāi)" 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>
?
第四步,發(fā)布!我懶,我沒(méi)在linux安裝net sdk,所以我在這直接就選擇文件夾發(fā)布,參數(shù)設(shè)置為獨(dú)立框架+獨(dú)立文件。
第五步,把文件復(fù)制到linux系統(tǒng),根據(jù)官方的說(shuō)法中文字體是來(lái)源于skia底層,所以u(píng)no也會(huì)出現(xiàn),需要設(shè)置一下系統(tǒng)LC_CTYPE的變量,所以安裝官方的指示,創(chuàng)建一個(gè)sh腳本,內(nèi)容參考如下:
#! export LC_CTYPE=en_US.UTF-8 && ./Avalonia11Test
最后,就把sh腳本使用sudo chmod提升一下權(quán)限,執(zhí)行./你的sh 大功告成!
這是沒(méi)有使用該方法直接執(zhí)行的效果圖:
?
這是使用了該方法的運(yùn)行圖:
?
在國(guó)產(chǎn)系統(tǒng)上做開(kāi)發(fā),在當(dāng)前QT大行其道的情況下,一個(gè)來(lái)自搞了很多年NET程序員的倔強(qiáng),特別是JG行業(yè)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-635827.html
?
到了這里,關(guān)于解決Avalonia 11.X版本的中文字體問(wèn)題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!