我有一个应用程序使用单独的库程序集资源(但不是一个没有代码的资源专用程序集),我想在库中包含一个自定义字体。
我能够得到字体,这是一个 Open Type Font
,如果我将其.otf文件作为资源添加到执行程序集的项目(而不是资源库项目),并将属性设置为Build Action ='Resource'并复制到Output ='Do Not Copy',则加载,使用以下代码:
FontFamily font = new FontFamily(new Uri("pack://application:,,,/"),
"./Resources/#CustomFont")); // Resources is a subfolder
但是,当我尝试将字体添加到资源库项目时,不会加载字体。我尝试使用以下代码加载它(另请注意:我对pack URI没有太多经验):
FontFamily font = new FontFamily(new Uri("pack://application:,,,/MyLibrary"),
"./Resources/#CustomFont"));
// there is a Resources subfolder in my library as well
// not sure about whether I need the .
该库适用于其他资源,例如图像。
我还尝试了一堆URI的其他排列没有成功(它也不会抛出异常,只显示默认字体,不确定这是否是一个单独的问题)。
我一直在工作 包含应用程序的字体 在MSDN上,它有一个创建字体资源库的例子,但没有使用代码的示例(我被迫使用后面的代码)。
关于我需要做什么的任何想法?我偏离轨道吗?
我在我的应用程序中工作(从代码隐藏中的另一个程序集加载字体)。对于像这样的字体URI:
pack://application:,,,/MyAssembly.Name;component/Resources/Fonts/#Swis721 Md BT
我让它工作的方式(经过痛苦的试验和错误,如果我没记错的话)是:
new FontFamily(
new Uri("pack://application:,,,/MyAssembly.Name;component/Resources/Fonts/"),
"./#Swis721 Md BT"
)
希望有所帮助。
我在我的应用程序中工作(从代码隐藏中的另一个程序集加载字体)。对于像这样的字体URI:
pack://application:,,,/MyAssembly.Name;component/Resources/Fonts/#Swis721 Md BT
我让它工作的方式(经过痛苦的试验和错误,如果我没记错的话)是:
new FontFamily(
new Uri("pack://application:,,,/MyAssembly.Name;component/Resources/Fonts/"),
"./#Swis721 Md BT"
)
希望有所帮助。
WPF不支持使用包符号以编程方式创建FontFamily对象。
文档在页面末尾说出来, 这里
这是引用:
使用包的绝对URI:表示法: WPF应用程序不允许您使用“pack:”以编程方式创建FontFamily对象,作为对字体的绝对统一资源标识符(URI)引用的一部分。例如,“pack:// application:,,, / resources /#Pericles Light”是无效的字体引用。
(我知道,老问题,但我找不到正确的答案。)
Ross的答案仅适用于某些版本的netframework。
(不适用于netframework 4.6)
我认为这是最好的答案:
枚举应用程序中的字体:
foreach (FontFamily fontFamily in Fonts.GetFontFamilies(new Uri("pack://application:,,,/"), "./resources/"))
{
// Perform action.
}
参考