Добавить семейство шрифтов в resourceDictionary - PullRequest
4 голосов
/ 14 марта 2012

Я использую msdn учебник , чтобы добавить FontFamily в мое приложение Wpf, в .csproj у меня есть:

  <ItemGroup>
    <Resource Include="Resources\MetaOT-Norm.otf" />
    <Resource Include="Resources\MetaOT-Bold.otf" />
  </ItemGroup>

Я добавил fontfamily в ResourceDictionary, например:

<FontFamily x:Key="FontMetaOT">./Resources/#Meta OT</FontFamily>

Но это не применяется ... (Я пробовал с файлами шрифтов в каталоге шрифтов Windows, и это работает хорошо).Есть идеи?

1 Ответ

2 голосов
/ 18 ноября 2015

Если вы используете файл словаря ресурсов, вы должны обращаться к файлам, используя Pack URI Scheme . Например:

В следующем примере показан URI пакета для файла ресурсов XAML, который находится в корне папки проекта указанной сборки.

pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml

В следующем примере показан URI пакета для файла ресурсов XAML, который находится в подпапке папки проекта указанной сборки.

pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml

В следующем примере показан URI пакета для файла ресурсов XAML, который находится в корневой папке указанной, зависящей от версии папка проекта сборки.

pack://application:,,,/ReferencedAssembly;v1.0.0.1;component/ResourceFile.xaml

Если файл находится в выходной папке, вы можете использовать сайт происхождения для ссылки на него:

В следующем примере показан URI пакета для сайта происхождения XAML файл, хранящийся в том месте, откуда находится исполняемая сборка запущен.

pack://siteoforigin:,,,/SiteOfOriginFile.xaml

В следующем примере показан URI пакета для сайта происхождения XAML файл, хранящийся в подпапке относительно места, из которого исполняемая сборка приложения запущена.

pack://siteoforigin:,,,/Subfolder/SiteOfOriginFile.xaml

Как пример:

    <UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <!--A resource dictionary in the output folder in the Assets folder-->
            <ResourceDictionary Source="pack://siteoforigin:,,,/Assets/OpenIconsDictionary.xaml"/>
            <!--A resource dictionary packed in the Gui dll-->
            <ResourceDictionary Source="pack://application:,,,/Gui;component/Assets/PackedIconsDictionary.xaml"/>
        </ResourceDictionary.MergedDictionaries>
      </ResourceDictionary>
</UserControl.Resources>



<!--In the output folder /Assets/OpenIconsDictionary.xaml (Build Action: Embedded Resource, Copy always)-->
<ResourceDictionary
                xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <BitmapImage x:Key="Icon"                 
                 UriSource="pack://siteoforigin:,,,/Images/image.png"/>


</ResourceDictionary>


<!--In Gui.dll in the folder /Assets/PackedIconsDictionary.xaml (Build Action: Page, Do not copy)-->
<ResourceDictionary
                xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <BitmapImage x:Key="Icon"                 
                 UriSource="pack://siteoforigin:,,,/Images/image.png"/>


</ResourceDictionary>
...