如何在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
相关产品推荐
相关产品推荐

