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)