在.NET C#项目中如何导入自定义ttf字体并正确创建FontFamily实例
自定义TTF字体加载失败解决方案
第一步:先配置字体文件属性
这是最容易被遗漏的前置操作:
- 在解决方案资源管理器中找到你存放的.ttf字体文件,右键选择【属性】
- 将【生成操作】设置为资源/内容(根据你使用的技术栈调整,WPF选资源,WinForms/控制台选内容即可)
- 将【复制到输出目录】设置为如果较新则复制
第二步:根据技术栈选择正确加载方式
如果你使用WPF/WinUI/MAUI
你之前的写法错误出在路径格式和字体名规则:
- 不能直接用根路径
/开头的写法,建议用pack URI格式指定字体位置 #后接的不是字体文件名,是字体的内部正式名称:你可以双击打开ttf字体文件,第一行显示的「字体名称」才是需要填写的内容
正确写法示例:
// 替换为你自己的程序集名称、字体路径、字体内部名即可 FontFamily fontFamily = new FontFamily("pack://application:,,,/你的程序集名称;component/myfontpath/fontname.ttf#思源黑体 Regular");
如果你使用WinForms/控制台项目
更推荐用PrivateFontCollection加载自定义字体,不会出现路径找不到的问题,写法如下:
using System.Drawing.Text; using System.IO; // 先拼完整的字体文件路径,避免相对路径解析错误 string fontPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"myfontpath\fontname.ttf"); PrivateFontCollection pfc = new PrivateFontCollection(); pfc.AddFontFile(fontPath); FontFamily fontFamily = pfc.Families[0];
路径校验小技巧
如果还是报错,可以先加一行代码验证文件是否能被程序正常识别:
// 输出为True说明路径没问题,输出False则需要调整路径写法 Console.WriteLine(File.Exists(fontPath));
内容的提问来源于stack exchange,提问作者emirryhn
相关产品推荐
相关产品推荐

