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

UWP运行时下载字体后添加到Application.Current.Resources失效问题

解决运行时下载并应用字体的问题
  • 核心问题:应用安装目录(Windows.ApplicationModel.Package.Current.InstalledLocation)是只读的,运行时无法修改其中的文件,你执行的移动文件操作实际并未生效,因此系统无法识别该目录下新增的字体。手动添加到项目Assets目录是因为编译时文件被打包进安装包,属于合法的安装资源,所以能被识别。

  • 正确方案:直接将下载的字体保存在应用的可写目录(ApplicationData.Current.LocalFolder),通过ms-appdata:///local/协议引用该字体文件,无需移动到Assets目录。

修改后的完整代码:

// 下载字体文件
HttpClient client = new HttpClient();
var response = await client.GetByteArrayAsync("https://webfonts.sample.com/archivoblackregular/font.ttf");

// 将字体保存到应用可写目录(LocalFolder)
StorageFolder localFolder = ApplicationData.Current.LocalFolder;
StorageFile fontFile = await localFolder.CreateFileAsync($"{fontFamily}.ttf", CreationCollisionOption.ReplaceExisting);
await File.WriteAllBytesAsync(fontFile.Path, response);

// 构造字体的ms-appdata协议路径,格式为 ms-appdata:///local/文件名#字体族名
string fontUri = $"ms-appdata:///local/{fontFile.Name}#{fontFamily}";
// 添加到应用资源
Application.Current.Resources[fontFamily] = new FontFamily(fontUri);
  • 关键说明:
    • ms-appdata:///local/是UWP访问本地应用数据目录的标准协议,系统可以通过这个协议加载LocalFolder中的字体文件。
    • 构造FontFamily时,格式为协议路径#字体族名,这里的字体族名需要和字体文件内部的名称一致(可通过Windows字体查看器打开字体文件确认实际族名)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 10:00:56