Kac*_*ski 6 wpf fonts xaml resourcedictionary mergeddictionaries
我正在构建一个使用ResourceDictionaries
其他程序集的应用程序,但在使用字体时遇到了问题。
有一个名为MyFontAssembly的程序集将字体以及对它们的引用存储为ResourceDictionary
. 它的结构如下:
MyFontAssembly
- FontDictionary.xaml - (stores references to fonts)
- Fonts
- FontA.ttf
- FontB.ttf
...
Run Code Online (Sandbox Code Playgroud)
还有另一个程序集用于存储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>
Run Code Online (Sandbox Code Playgroud)
笔记:
<FontFamily x:Key="MyFontKey">Fonts/#MyFontName</FontFamily>
在具有相同结构的单个 exe 项目中使用实现,一切都很好,当我在重构期间将实现拆分为几个程序集时出现问题,就像我描述的那样。MyFontAssembly
已MyStylesAssembly
正确合并。我在这里只是用那个名字来称呼它,在实际代码中,它还有一些ResourceDictionaries
由MyStylesAssembly
. 问题似乎只是<FontFamily>
标签无法识别 ttf 文件。MyFontAssembly
并且MyStylesAssembly
是类型的项目ClassLibrary
并且不包含除 in 之外的任何代码ResourceDictionaries
(没有类或代码背后)在这里找到了答案。我必须设置build action
为resource
,然后使用以下方法引用它们:
<FontFamily x:Key="MyFontKey">pack://application:,,,/MyFontAssemblyName;Component/Fonts/#MyFontName</FontFamily>
Run Code Online (Sandbox Code Playgroud)
或较短的版本:
<FontFamily x:Key="MyFontKey">/MyFontAssemblyName;Component/Fonts/#MyFontName</FontFamily>
Run Code Online (Sandbox Code Playgroud)