XAML - 使用来自另一个程序集的资源字典中的字体

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)

笔记:

  • 我确信我的字体形式 ttf 工作并且正确命名。我<FontFamily x:Key="MyFontKey">Fonts/#MyFontName</FontFamily>在具有相同结构的单个 exe 项目中使用实现,一切都很好,当我在重构期间将实现拆分为几个程序集时出现问题,就像我描述的那样。
  • MyFontAssemblyMyStylesAssembly正确合并。我在这里只是用那个名字来称呼它,在实际代码中,它还有一些ResourceDictionariesMyStylesAssembly. 问题似乎只是<FontFamily>标签无法识别 ttf 文件。
  • MyFontAssembly并且MyStylesAssembly是类型的项目ClassLibrary并且不包含除 in 之外的任何代码ResourceDictionaries(没有类或代码背后)

Kac*_*ski 7

在这里找到了答案。我必须设置build actionresource,然后使用以下方法引用它们:

<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)