使用本地磁盘中的字体文件

时间:2017-08-10 07:21:47

标签: c# xaml uwp sharpdx directwrite

我正在使用C#开发一个UWP应用程序来预览用户本地磁盘中的字体文件。我正在使用SharpDX库来读取.ttf文件内容并查询不同的字体属性。我的问题是:

如何将TextBlock FontFamily设置为加载的字体?

当然,使用加载的字体名称设置FontFamily属性不起作用,因为系统上不需要安装加载的字体。

请帮忙。

1 个答案:

答案 0 :(得分:1)

没有完整的文件系统特权,就无法加载字体。

但是您可以执行以下操作:

I。让用户从系统中选择字体文件(我想您已经完成了此任务)

II。将检索到的StorageFile复制到应用程序的沙箱中。

async Task<StorageFile> ImportFont(StorageFile file)
{
  StorageFolder folder = await ApplicationData.Current.LocalFolder.CreateFolderAsync("fontcache", CreationCollisionOption.OpenIfExists);
  return await file.CopyAsync(folder, file.Name, NameCollisionOption.ReplaceExisting);
}

III。接下来,创建导入文件(here are all available URI schemes listed)的路径

StorageFile importedFile = await ImportFont(userPickedFile);
string fontPath = "ms-appdata:///local/fontcache/" + importedFile.Name;

IV。根据您的路径创建字体系列

string fontName = sharpDXFont.Name; // this is the name SharpDX has extracted
FontFamily family = new FontFamily(fontPath + "#" + fontName);

V。就是这样!

当不再需要字体时,别忘了清理本地文件夹