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

WPF无法从Resources文件夹加载字体问题求助

解决WPF设计阶段字体正常、运行时失效的问题

我碰到过好几个开发者遇到这种WPF字体加载的棘手问题——设计器里显示完全正常,一运行项目字体就失效,哪怕开了管理员权限也没用。咱们一步步来排查和解决:

1. 先检查字体文件的属性(最常见的坑)

首先确认你的字体文件(比如IRRoya.ttf)在项目的Resources文件夹里,然后右键这个文件,查看属性面板:

  • 把生成操作设置为Resource(别选Content或Embedded Resource,WPF里只有Resource是正确的嵌入方式)
  • 把复制到输出目录设置为不复制(因为字体已经嵌入到程序集里,不需要额外复制到输出文件夹)

设计器能找到字体是因为它直接读取项目里的文件,但运行时程序只会加载嵌入到程序集里的资源,这一步错了肯定会失效。

2. 修正FontFamily的路径格式

你当前用的/Resources/#IRRoya在设计器里能解析,但运行时WPF需要更明确的pack URI路径,分两种情况:

  • 如果是WPF应用程序(exe项目),可以用完整的pack URI:pack://application:,,,/Resources/#IRRoya
  • 或者用带程序集名称的格式:/你的项目名称;component/Resources/#IRRoya(把「你的项目名称」换成你实际的项目AssemblyName,比如项目叫MyPersianApp,就写/MyPersianApp;component/Resources/#IRRoya)

3. 确认字体的实际内部名称

有时候你以为的字体名称(比如IRRoya)和字体文件内部的正式名称不一致,这也会导致运行时加载失败:

  • 可以把字体安装到系统,打开控制面板的「字体」,查看它显示的正式名称;或者用FontForge这类工具查看字体的PostScript名称/显示名称
  • 比如如果字体内部名称是IR Roya,那你就得把#后面的部分改成对应的名称,比如/MyPersianApp;component/Resources/#IR Roya

4. 尝试用资源字典统一管理字体

如果上面的方法都不行,试试把字体定义到App.xaml的资源字典里,这样运行时解析更可靠:
在App.xaml的<Application.Resources>里添加:

<FontFamily x:Key="IRRoyaFont">pack://application:,,,/Resources/#IRRoya</FontFamily>

然后在TextBlock里引用:

<TextBlock Margin="0,10,0,0" FontFamily="{StaticResource IRRoyaFont}" FontSize="14" Text="پایگاه داده های موجود : "/>

5. 清理缓存重新编译

有时候旧的输出文件会干扰,试试:

  • 右键项目 → 清理
  • 右键项目 → 重新生成
  • 或者手动删除项目根目录下的bin和obj文件夹,再重新编译

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:54:15