Включить шрифты в приложение WPF - PullRequest
0 голосов
/ 07 ноября 2019

Хорошо, так что все, что я пытался, это неправильно загружать мои шрифты, я добавил их в файл .csproj, что было сделано путем переключения copy to output directory, так что это выглядит как

<Resource Include="Resources\Fonts\SourceSansPro-Black.ttf">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Resource>
    <Resource Include="Resources\Fonts\SourceSansPro-BlackItalic.ttf">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Resource>
    <Resource Include="Resources\Fonts\SourceSansPro-Bold.ttf">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Resource>
    <Resource Include="Resources\Fonts\SourceSansPro-BoldItalic.ttf">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Resource>
    <Resource Include="Resources\Fonts\SourceSansPro-ExtraLight.ttf">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Resource>
    <Resource Include="Resources\Fonts\SourceSansPro-ExtraLightItalic.ttf">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Resource>
    <Resource Include="Resources\Fonts\SourceSansPro-Italic.ttf">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Resource>
    <Resource Include="Resources\Fonts\SourceSansPro-Light.ttf">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Resource>
    <Resource Include="Resources\Fonts\SourceSansPro-LightItalic.ttf">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Resource>
    <Resource Include="Resources\Fonts\SourceSansPro-Regular.ttf">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Resource>
    <Resource Include="Resources\Fonts\SourceSansPro-SemiBold.ttf">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Resource>
    <Resource Include="Resources\Fonts\SourceSansPro-SemiBoldItalic.ttf">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Resource>

Затем я добавил ссылки внутри моего ui-dictionary, который выглядит как

    <FontFamily x:Key="Black" >pack://application:,,,/Resources/Fonts/#SourceSansPro-Black</FontFamily>
    <FontFamily x:Key="BlackItalic" >pack://application:,,,/Resources/Fonts/#SourceSansPro-BlackItalic</FontFamily>
    <FontFamily x:Key="Bold" >pack://application:,,,/Resources/Fonts/#SourceSansPro-Bold</FontFamily>
    <FontFamily x:Key="BoldItalic" >pack://application:,,,/Resources/Fonts/#SourceSansPro-BoldItalic</FontFamily>
    <FontFamily x:Key="ExtraLight" >pack://application:,,,/Resources/Fonts/#SourceSansPro-ExtraLight</FontFamily>
    <FontFamily x:Key="ExtraLightItalic" >pack://application:,,,/Resources/Fonts/#SourceSansPro-ExtraLightItalic</FontFamily>
    <FontFamily x:Key="Italic" >pack://application:,,,/Resources/Fonts/#SourceSansPro-Italic</FontFamily>
    <FontFamily x:Key="Light" >pack://application:,,,/Resources/Fonts/SourceSansPro-Light.ttf</FontFamily>
    <FontFamily x:Key="LightItalic" >pack://application:,,,/Resources/Fonts/#SourceSansPro-LightItalic</FontFamily>
    <FontFamily x:Key="Regular" >pack://application:,,,/Resources/Fonts/#SourceSansPro-Regular</FontFamily>
    <FontFamily x:Key="SemiBold" >pack://application:,,,/Resources/Fonts/#SourceSansPro-SemiBold</FontFamily>
    <FontFamily x:Key="SemiBoldItalic" >pack://application:,,,/Resources/Fonts/#SourceSansPro-SemiBoldItalic</FontFamily>

Но каждый раз, когда я пытался использовать его, шрифты не загружаются. Итак, я попробовал различные методы в URI

<!-- First Method -->
    <FontFamily x:Key="Light" >pack://application:,,,/Resources/Fonts/SourceSansPro-Light.ttf#SourceSansPro-Light</FontFamily>

<!-- Second Method -->
<FontFamily x:Key="Light" >pack://application:,,,/Resources/Fonts/#SourceSansPro-Light</FontFamily>

<!-- Third Method -->
<FontFamily x:Key="Light" >/Resources/Fonts/#SourceSansPro-Light</FontFamily>

<!-- Third Method -->
<FontFamily x:Key="Light" >/Resources/Fonts/#SourceSansPro-Light</FontFamily>

<!-- Fourth Method -->
<FontFamily x:Key="Light" >/Resources/Fonts/SourceSansPro-Light.ttf#SourceSansPro-Light</FontFamily>

Я что-то здесь упускаю?

1 Ответ

0 голосов
/ 07 ноября 2019

Встраивание шрифтов в WPF в качестве ресурсов, довольно просто. Однако есть несколько ошибок, о которых вам нужно знать.

Вот пошаговый процесс, которому я следовал в примере приложения:

Добавлены Resources / Fonts папкив мой проект

Перетащите файлы Source Sans Pro .ttf в папку Fonts

Visual Studio автоматически установит для Build Action значение Resource

Примечание. Вам не нужно копировать их в выходной каталог, если они используются в качестве ресурсов

Создан Fonts.xaml ResourceDictionary со следующим кодом

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <FontFamily x:Key="Regular">pack://application:,,,/WpfApp4;component/Resources/Fonts/#Source Sans Pro</FontFamily>
    <FontFamily x:Key="Black">pack://application:,,,/WpfApp4;component/Resources/Fonts/#Source Sans Pro Black</FontFamily>

</ResourceDictionary>

Затем я слился вFonts.xaml ресурсов в мой App.xaml файл.

<Application x:Class="WpfApp4.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    StartupUri="MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Fonts.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

Первая проблема, с которой вы столкнулись - неправильный формат Pack Uri.

pack: // application: ,,, / YourAppNamespace; компонент / Resources / Fonts / # Имя семейства шрифтов

Вторая проблема, с которой вы столкнулись, - неверное имя семейства шрифтов

Имя семейства шрифтов обычно , а не совпадает с именем файла .ttf!

Чтобы получить правильное имя, приветghly рекомендую использовать dp4 Font Viewer .

Надеюсь, это поможет!

...