【发布时间】:2017-10-06 08:45:11
【问题描述】:
我正在构建一个使用来自另一个程序集的ResourceDictionaries 的应用程序,但我在使用字体时遇到了问题。
有一个名为 MyFontAssembly 的程序集将字体连同对它们的引用存储为ResourceDictionary。它的结构如下:
MyFontAssembly
- FontDictionary.xaml - (stores references to fonts)
- Fonts
- FontA.ttf
- FontB.ttf
...
还有另一个程序集存储ResourceDictionaries 用于样式控制,它被称为MyStylesAssembly。然后将来自 MyStylesAssembly 的 ResourceDictionaries 合并到应用程序的 App.xaml 中,以提供可重用的样式。
问题是我的样式确实识别字体资源(代码没有崩溃,因为它无法通过键找到资源),但它看起来像存储为 ttf 文件的字体未应用。
我在FontDictionary.xaml 中尝试了以下方法,但都不起作用:
<FontFamily x:Key="MyFontKey">Fonts/#MyFontName</FontFamily>
<FontFamily x:Key="MyFontKey">pack://application:,,,/MyFontAssemblyName;Component/Fonts/#MyFontName</FontFamily>
<FontFamily x:Key="MyFontKey">/MyFontAssemblyName;Component/Fonts/#MyFontName</FontFamily>
<FontFamily x:Key="MyFontKey">pack://application:,,,/Fonts/#MyFontName</FontFamily>
注意:
- 我确信我的字体格式 ttf 可以正常工作并且命名正确。我在具有相同结构的单个 exe 项目中使用
<FontFamily x:Key="MyFontKey">Fonts/#MyFontName</FontFamily>实现,一切都很好,当我将实现拆分为几个程序集时出现了问题,就像我在重构期间描述的那样。 -
MyFontAssembly正确合并到MyStylesAssembly中。我只是在这里用那个名字来称呼它,在实际代码中,它还有更多ResourceDictionaries被MyStylesAssembly正确使用。问题似乎只是<FontFamily>标签无法识别 ttf 文件。 -
MyFontAssembly和MyStylesAssembly是ClassLibrary类型的项目,不包含ResourceDictionaries以外的任何代码(没有类或代码)
【问题讨论】:
-
您是否使用了正确的参考。如果不起作用,您需要参考 XAML URI 包文档约定
-
我很可能没有使用正确的方法来引用字体,但我不知道正确的方法是什么(这是我的问题,在这里)。
-
使用示例更新示例
标签: wpf xaml fonts resourcedictionary mergeddictionaries