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

如何在MauiAppBuilder中添加字体,无需在MauiProgram的ConfigureFonts配置

解决方案:将字体配置整合到MAUI Toolkit扩展方法中

没问题,我来帮你搞定这个!其实把字体配置逻辑嵌入到你的UseMyMauiToolkit扩展方法里非常直接,因为MauiAppBuilder本身就提供了访问ConfigureFonts的入口,完全不需要依赖异步等待Application.Current的逻辑。

步骤1:修改你的UseMyMauiToolkit扩展方法

直接在扩展方法里调用builder.ConfigureFonts(),把之前在Program.cs里写的字体添加逻辑移到这里就可以了。修改后的AppBuilderExtensions类如下:

public static class AppBuilderExtensions
{
    #region Public Methods
    public static MauiAppBuilder UseMyMauiToolkit( this MauiAppBuilder builder )
    {
        // 在这里添加字体配置逻辑
        builder.ConfigureFonts(fonts =>
        {
            fonts.AddFont( "OpenSans-Regular.ttf", "OpenSansRegular" );
            fonts.AddFont( "OpenSans-Semibold.ttf", "OpenSansSemibold" );
            fonts.AddFont( "materialdesignicons-webfont.ttf", "Material" );
        });

        Task.Factory.StartNew( AppBuilderExtensions.SetDefaultStyles );

        return builder;
    }
    #endregion

    #region Private Methods
    private static async void SetDefaultStyles()
    {
        await AppBuilderExtensions.ApplicationExists();   
        Application.Current.PageAppearing += AppBuilderExtensions.ApplicationMainAppearing;
    }

    private static void SetDefaultStylesCore()
    {
        var appMergedDictionaries = Application.Current?.Resources?.MergedDictionaries;
        if( appMergedDictionaries != null )
        {
            if( appMergedDictionaries.Any( dict => dict.GetType() == typeof( Styles ) ) )
                return;
            appMergedDictionaries.Add( new Styles() );
        }
    }

    private static async Task<bool> ApplicationExists()
    {
        await Task.Factory.StartNew( () =>
        {
            while( Application.Current == null )
            {
            }
        } );
        return true;
    }
    #endregion

    #region Event Handlers
    private static void ApplicationMainAppearing( object sender, Page e )
    {
        Application.Current.PageAppearing -= AppBuilderExtensions.ApplicationMainAppearing;
        AppBuilderExtensions.SetDefaultStylesCore();
    }
    #endregion
}

步骤2:确保字体文件的构建操作正确

别忘了检查你的字体文件(比如materialdesignicons-webfont.ttf)的Build Action设置为EmbeddedResource,否则MAUI无法找到这些字体文件。你可以右键字体文件 → 属性 → 构建操作,选择EmbeddedResource。

步骤3:使用扩展方法简化Program.cs配置

现在你在Program.cs里只需要调用UseMyMauiToolkit(),就自动完成了字体和默认样式的配置,不需要再单独写ConfigureFonts的代码了:

var builder = MauiApp.CreateBuilder();
builder
    .UseMauiApp<App>()
    .UseMyMauiToolkit(); // 这一行就包含了字体和样式的配置

// 其他配置...

关键说明

  • 这种方式完全符合MAUI的设计模式,MauiAppBuilder的扩展方法就是用来封装这类全局配置逻辑的,比依赖Application.Current要更可靠、更符合启动流程。
  • 字体别名(比如"Material")要和你自定义控件中使用的FontFamily值保持一致,这样控件才能正确加载字体图标。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 16:56:14