Skip to content

KeyonChing/AvaFonts

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 

Repository files navigation

AvaFonts

一个应用AvaloniaUI的自定义字体类库

使用说明

使用场景

  • 使用AvaloniaUI生成的桌面应用程序(其他平台尚未测试是否可用,请自行下载测试)

版本说明

  • .net版本:.net standard 2.0 (.NET 和.NET Core 2.0、2.1、2.2、3.0、3.1、5.0、6.0、7.0、8.0)
  • avalonia版本:支持11.0以上版本(截至发布前,AvaloniaUI已发布了11.0.6版本,实测可用,若新版本发布后这个库不再可用,请告知我)

准备工作

1.准备字体文件

  • 首先,在项目根目录中添加文件夹"AvaFonts"(自定义文件夹名称也可以)

  • 文件目录结构:

    ──Avalonia\        //根目录
    ├── *.ttf        // 单样式字体,若在xaml中样式设置为粗体和斜体,会通过字体模拟器渲染
    ├── *.ttf
    ├── *.ttf
    ├── *.ttf\        //多样式字体,以文件夹方式表示,文件夹名最后要加.ttf,
        ├──*-Bold.ttf      //多样式字体文件的子字体,支持各种样式和斜体
        ├──*-Thin.ttf
        ├──*-italic.ttf

    image

  • 文件名与字体对应关系:

    • 单样式字体
      文件名Ava.ttf
      xaml:Ava        //xaml FontFamily="Ava"
                       //可加入样式,仅支持Bold和Italic
    • 多样式字体
     文件夹Ava.ttf\
             ├── Ava.ttf            //xaml FontFamily="Ava"   必须要有Normal字体
             ├── Ava-Bold.ttf      //xaml FontFamily="Ava" FontWeight="Bold"
             ├── Ava-Light.ttf      //xaml FontFamily="Ava" FontWeight="Light"
             ├── Ava-italic.ttf      //xaml FontFamily="Ava" FontStyle="Italic"

2.修改项目文件

  - 加入以下代码:
 <PropertyGroup>
    <AvaloniaAccessUnstablePrivateApis>true</AvaloniaAccessUnstablePrivateApis>
    <Avalonia_I_Want_To_Use_Private_Apis_In_Nuget_Package_And_Promise_To_Pin_The_Exact_Avalonia_Version_In_Package_Dependency>true</Avalonia_I_Want_To_Use_Private_Apis_In_Nuget_Package_And_Promise_To_Pin_The_Exact_Avalonia_Version_In_Package_Dependency>
    <IsPackable>true</IsPackable>
 </PropertyGroup>
    
    <ItemGroup>
    <None Update="AvaFonts\*\*.ttf">
    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
    <None Update="AvaFonts\*.ttf">
    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
    </ItemGroup>

2.using & 注册字体管理器

  • 打开App.axaml.cs
    
    using Avalonia.Benchmarks;

      public override void RegisterServices()
      {
      var fmi = new AvaloniaFontsManagerImpl(new AvaloniaFontsSettings() { DefaultFontName = "Harmony" });//若字体文件夹为自定义名称,请赋值给 DefaultFontDirectory,值为绝对路径
      AvaloniaLocator.CurrentMutable.Bind<IFontManagerImpl>().ToConstant(fmi);
      var list = fmi.InstalledFont;//可查看已经识别到的字体
      base.RegisterServices();
      }

Tips

旧版的Avalonia解决方案升级Avalonia 0.11.0后,会导致设计器报错无法显示,若出现这种情况,请安装我修改后的扩展,安装方式请看 Avalonia for VisualStudio 2022