在WPF中,如何在代码中引用资源库中的字体?

axa*_*npi 14 c# wpf fonts pack-uri

我有一个应用程序使用单独的库程序集资源(但不是一个没有代码的资源专用程序集),我想在库中包含一个自定义字体.

Open Type Font如果我将其.otf文件作为资源添加到执行程序集的项目(而不是资源库项目),并且属性设置为Build Action ='Resource ,我可以获取要加载的字体.'并使用以下代码复制到输出='不复制':

FontFamily font = new FontFamily(new Uri("pack://application:,,,/"), 
                      "./Resources/#CustomFont")); // Resources is a subfolder
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试将字体添加到资源库项目时,不会加载字体.我尝试使用以下代码加载它(另请注意:我对包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 .
Run Code Online (Sandbox Code Playgroud)

该库适用于其他资源,例如图像.

我还尝试了一堆URI的其他排列没有成功(它也不会抛出异常,只显示默认字体,不确定这是否是一个单独的问题).

我一直在使用MSDN上的包装字体和应用程序,它有一个创建字体资源库的例子,但没有使用代码的示例(我不得不使用代码隐藏此代码).

关于我需要做什么的任何想法?我偏离了轨道吗?

Ros*_*oss 20

我在我的应用程序中工作(从代码隐藏中的另一个程序集加载字体).对于像这样的字体URI:

pack://application:,,,/MyAssembly.Name;component/Resources/Fonts/#Swis721 Md BT
Run Code Online (Sandbox Code Playgroud)

我让它工作的方式(经过痛苦的试验和错误,如果我没记错的话)是:

new FontFamily(
    new Uri("pack://application:,,,/MyAssembly.Name;component/Resources/Fonts/"),
    "./#Swis721 Md BT"
)
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.