You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.NET MAUI中通过DLL/NuGet从核心项目访问MaterialIconsFont.ttf

解决.NET MAUI核心项目字体在子项目无需重复添加即可使用的问题

要让核心项目中的字体资源直接被子项目复用,无需在子项目中重复添加TTF文件,你需要确保核心项目正确嵌入字体资源,并通过扩展方法将字体注册逻辑封装,供子项目调用。具体步骤如下:

一、核心项目配置调整

  1. 确认字体文件的项目配置
    打开核心项目的.csproj文件,确保字体文件的MauiFont条目正确配置,保证字体被作为嵌入式资源打包到DLL中:

    <ItemGroup>
      <MauiFont Include="Resources\Fonts\MaterialFontIcons.ttf" Alias="MaterialDesignIconsFont" />
    </ItemGroup>
    

    注:Alias值要和FontIconHelper中定义的MaterialDesignIconsFont常量完全一致,避免大小写或拼写错误。

  2. 封装字体注册扩展方法
    在核心项目中创建一个静态扩展类,将字体注册逻辑封装起来,方便子项目调用:

    using Microsoft.Maui.Hosting;
    
    namespace Mobile.UI.Core;
    
    public static class CoreMauiExtensions
    {
        public static MauiAppBuilder UseCoreSharedFonts(this MauiAppBuilder builder)
        {
            builder.ConfigureFonts(fonts =>
            {
                // 路径相对于核心项目的资源结构,MAUI会自动从嵌入式资源中加载该字体
                fonts.AddFont("Resources/Fonts/MaterialFontIcons.ttf", FontIconHelper.MaterialDesignIconsFont);
            });
            return builder;
        }
    }
    
  3. 重新生成核心项目
    编译核心项目,确保字体资源已正确嵌入到输出的DLL中。

二、子项目配置调整

  1. 保留核心项目DLL引用
    维持子项目对核心项目DLL的现有引用。

  2. 调用核心项目的字体注册方法
    在子项目的MauiProgram.cs中,调用核心项目提供的扩展方法,替代手动添加字体的逻辑:

    var builder = MauiApp.CreateBuilder();
    builder
        .UseMauiApp<App>()
        .UseCoreSharedFonts() // 注册核心项目中的字体
        .ConfigureServices();
    
  3. 验证字体使用
    保留子项目中原有XAML的字体引用代码,无需修改:

    xmlns:helper="clr-namespace:Mobile.UI.Core.Helpers;assembly=Mobile.UI.Core"
    
    <Image x:Name="image" HeightRequest="20" HorizontalOptions="EndAndExpand">
        <Image.Source>
            <FontImageSource
                Glyph="{x:Static helper:FontIconHelper.AccessPoint}"
                Size="20"
                Color="Black"
                FontFamily="{x:Static helper:FontIconHelper.MaterialDesignIconsFont}"/>
        </Image.Source>
    </Image>
    

问题根源说明

之前的问题在于:.NET MAUI的字体注册是项目级别的独立配置,子项目的MAUI运行时不会自动扫描并加载核心项目中的字体资源。只有通过在子项目中调用核心项目封装的字体注册逻辑,才能让MAUI从核心项目的嵌入式资源中加载字体,避免重复添加TTF文件。

内容的提问来源于stack exchange,提问作者Divyesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 23:54:31