I am building an application that uses ResourceDictionaries
from another assembilies and I'm having problems with using fonts.
There is an assembly named MyFontAssembly that stores fonts along with references to them as an ResourceDictionary
. The structure of it looks as follows:
MyFontAssembly
- FontDictionary.xaml - (stores references to fonts)
- Fonts
- FontA.ttf
- FontB.ttf
...
There is also another assembly that stores ResourceDictionaries
for styling controls and it's called MyStylesAssembly. ResourceDictionaries from MyStylesAssembly are then merged in an App.xaml of an application in order to provide reusable styles.
The problem is that my styles does recognise font resources (the code is not crashing because it couldn't find resource by its key), but it looks like fonts stored as ttf files were not applied.
I have tried the following in my FontDictionary.xaml
, but none of it works:
<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>
NOTE:
<FontFamily x:Key="MyFontKey">Fonts/#MyFontName</FontFamily>
implementation in the single exe project with the same structure and everything was just fine, the problem appeared when I have split the implementation into few assemblies, just like I described, during refactoring.MyFontAssembly
is merged in MyStylesAssembly
correctly. I just call it by that name here, in real code it has also a few more ResourceDictionaries
that are used correctly by MyStylesAssembly
. The problem appears to be with just <FontFamily>
tags not recognising ttf files.MyFontAssembly
and MyStylesAssembly
are projects of tyle ClassLibrary
and does not contain any code other than in ResourceDictionaries
(no classes or code behind)Found an answer here. I had to set build action
to resource
, then reference them by using:
<FontFamily x:Key="MyFontKey">pack://application:,,,/MyFontAssemblyName;Component/Fonts/#MyFontName</FontFamily>
or the shorter version:
<FontFamily x:Key="MyFontKey">/MyFontAssemblyName;Component/Fonts/#MyFontName</FontFamily>