Подтвердить что ты не робот

Как включить внешний шрифт в приложение WPF без его установки

Как включить внешний шрифт в приложение WPF без его установки

Я пробовал этот код

  System.Drawing.Text.PrivateFontCollection privateFonts = new    System.Drawing.Text.PrivateFontCollection();
  privateFonts.AddFontFile("C:\\Documents and Settings\\somefont.ttf");
  System.Drawing.Font font = new Font(privateFonts.Families[0], 12);
  this.label1.Font = font;

Он корректно работает в приложении Windows Form, но не в WPF.

4b9b3361

Ответ 1

Я использую такой код XAML:

<Style x:Key="Hatten">
        <Setter Property="TextElement.FontFamily" Value="Resources/#HATTEN" />
</Style>

#HATTEN - ссылка на файл hatten.tft в ресурсах.

Использование стиля:

 <TextBlock x:Name="lblTitle" Style="{DynamicResource Hatten}" FontSize="72"></TextBlock>

Ответ 2

Это два способа сделать это. Один из способов - упаковать шрифты внутри приложения. Другой способ заключается в том, чтобы шрифты имели выходную папку отдельно. Разница в основном заключается в URI, который необходимо загрузить.

Пакет с приложением

  • Добавьте папку /Fonts в ваше решение.
  • Добавьте в эту папку файлы True Type Font (*.ttf)
  • Включить файлы в проект
  • Выберите шрифты и добавьте их в решение
  • Установите BuildAction: Resource и Copy To Output Directory: Do not copy. Теперь ваш файл .csproj должен иметь такой раздел:

     <ItemGroup>
      <Resource Include="Fonts\NotoSans-Bold.ttf" />
      <Resource Include="Fonts\NotoSans-BoldItalic.ttf" />
      <Resource Include="Fonts\NotoSans-Italic.ttf" />
      <Resource Include="Fonts\NotoSans-Regular.ttf" />
      <Resource Include="Fonts\NotoSansSymbols-Regular.ttf" />
    </ItemGroup>
    
  • В App.xaml добавить <FontFamily> Ресурсы. Он должен выглядеть в следующем примере кода. Обратите внимание, что URI не содержит имя файла при упаковке с приложением.

    <Applicaton ...>
    <Application.Resources>
        <FontFamily x:Key="NotoSans">pack://application:,,,/Fonts/#Noto Sans</FontFamily>
        <FontFamily x:Key="NotoSansSymbols">pack://application:,,,/Fonts/#Noto Sans Symbols</FontFamily>
    </Application.Resources>
    </Application>
    
  • Примените свои шрифты следующим образом:

    <TextBlock x:Name="myTextBlock" Text="foobar" FontFamily="{StaticResource NotoSans}" 
               FontSize="10.0" FontStyle="Normal" FontWeight="Regular" />
    
  • Вы также можете установить шрифт императивно:

    myTextBlock.FontFamily = new FontFamily(new Uri("pack://application:,,,/"), "./Fonts/#Noto Sans");
    

Копировать в выходной каталог

  • Добавьте папку /Fonts в ваше решение.
  • Добавьте в этот порядок файлы True Type Font (*.ttf)
  • Включить файлы в проект
  • Выберите шрифты и добавьте их в решение
  • Установите BuildAction: Content и Copy To Output Directory: Copy if newer. Теперь ваш файл .csproj должен иметь такой раздел:

     <ItemGroup>
      <Content Include="Fonts\NotoSans-Bold.ttf">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </Content>
      <Content Include="Fonts\NotoSans-BoldItalic.ttf">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </Content>
      <Content Include="Fonts\NotoSans-Italic.ttf">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </Content>
      <Content Include="Fonts\NotoSans-Regular.ttf">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </Content>
      <Content Include="Fonts\NotoSansSymbols-Regular.ttf">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </Content>
    </ItemGroup>
    
  • В App.xaml добавить <FontFamily> Ресурсы. Он должен выглядеть в следующем примере кода. Обратите внимание, что URI не содержит имя файла при упаковке с приложением.

    <Applicaton ...>
    <Application.Resources>
        <FontFamily x:Key="NotoSansRegular">./Fonts/NotoSans-Regular.tts#Noto Sans</FontFamily>
        <FontFamily x:Key="NotoSansItalic">./Fonts/NotoSans-Italic.tts#Noto Sans</FontFamily>
        <FontFamily x:Key="NotoSansBold">./Fonts/NotoSans-Bold.tts#Noto Sans</FontFamily>
        <FontFamily x:Key="NotoSansBoldItalic">./Fonts/NotoSans-BoldItalic.tts#Noto Sans</FontFamily>
        <FontFamily x:Key="NotoSansSymbols">./Fonts/NotoSans-Regular.tts#Noto Sans Symbols</FontFamily>
    </Application.Resources>
    </Application>
    
  • Примените свои шрифты следующим образом:

    <TextBlock Text="foobar" FontFamily="{StaticResource NotoSansRegular}" 
               FontSize="10.0" FontStyle="Normal" FontWeight="Regular" />
    

Ссылки

Ответ 3

Лучший ответ на этот вопрос, который я нашел здесь

http://geekswithblogs.net/Martinez/archive/2010/01/29/custom-font-in-wpf-application.aspx

РЕШЕНИЕ Он предполагает использование еще более злой строки, чем раньше, но работает как ожидалось:

<Label FontFamily="pack://application:,,,/Folder1/#Katana">Text</Label> 

Где Folder1 - это папка вашего проекта, в которой вы сохраняете файл TTF. Три примечания в конце:

  • 'Katana - это имя шрифта, а не имя файла. Это существенное различие. Чтобы получить имя шрифта, просто дважды щелкните файл.

  • Не забудьте поставить знак хеша '# перед именем шрифта. Это не будет работать иначе.

  • Пользовательский шрифт также может быть добавлен в проект с надписью "Построение действия" в "Содержимое". Однако этого не рекомендуется, и для простоты я проигнорировал эту возможность.

Некоторые дополнительные ссылки

https://msdn.microsoft.com/en-us/library/ms753303(v=vs.100).aspx

https://msdn.microsoft.com/en-us/library/cc296385.aspx

Ответ 4

Я точно не нашел ответа. Но я нашел решение, которое я не видел в Интернете.

Я следил за рекомендацией делать папку и маркировать все файлы внутри как Ресурсы. Но мне нужно было перечислить их, и это была моя главная проблема, потому что мне нужно загрузить все на свой экран, не записывая имя где-нибудь. Я просто хочу, чтобы просто удалить другой шрифт в эту папку и перечислить его.

Я нашел это как решение для перечисления всех файлов в папке моих ресурсов/шрифтов

Fonts.GetFontFamilies(new Uri("pack://application:,,,/resources/fonts/#"))

Я надеюсь, что это поможет вам организовать ваши шрифты.

Ответ 5

Я использую xaml для этого

<Window

 FontFamily ="./Fonts/#somefont"

>

Я включил файл шрифта в папку "Шрифты"

Ответ 6

У меня есть папка с шрифтами внутри папки с ресурсами в моем проекте. Во время сборки он скопирует эти шрифты в папку как содержимое. Затем я могу просто использовать следующий XAML, чтобы использовать шрифт FontAwesome, чтобы иметь значок на моей кнопке.

<Button Content="&#xf0c9;" FontFamily="./assets/fonts/#FontAwesome">

Ответ 7

Здесь Что для меня работало:

(1) Добавить каталог в проект: font

(2) Переместить файл шрифта ttf в каталог шрифтов

(3) Добавить файл шрифта ttf в проект

(4) Установите свойство "Build" файла шрифта tff в "Ресурс"   (Примечание: я использовал "Ресурс" вместо "Встроенный ресурс",    в выборе со списком.)

(5) Откройте окно, в котором вы используете шрифт, и сделайте   следующие изменения:

<Window ... >
    <Window.Resources>
        <FontFamily x:Key="YourFontNickName">
        pack://application:,,,/font/#NameOfFont
        <!-- Note: NameOfFont can be font by double clicking
             on font from explorer and writing down name
             of the font reported.  Its not the same
             as the file name -->
        </FontFamily>   
    </Window.Resources>


    <!-- Use font as Xaml -->
    <StackPanel>
        <Textblock FontFamily="{StaticResource YourFontNickName}">
        This is a test
        </Testblock>
        <Textblock Name="text1"/>
    </StackPanel>
...
</Window>

(6) Если вы хотите изменить шрифт из кода. Сделайте это:

public partial class Window1 : Window {

    // Use font as C# Code
    public void UpdateText1() {

            text1.Text      = "Hi There";
            FontFamily ff   = this.Resources["YourFontNickName"] 
                                as FontFamily;
            if (ff == null) {
                Messagebox.Show("Wrong Font Name", "ERROR");
                return;
            }
            text1.FontFamily = ff;
            text1.FontSize   = 30;
    }

    ...
}

Ответ 8

Я пытался заставить это работать с другим шрифтом, он работал только для меня в этом формате с. /Fonts

<FontFamily x:Key="NotoSans">pack://application:,,,./Fonts/#Noto Sans</FontFamily>

Ответ 9

Сначала) Скопируйте шрифты в папку проекта, например /Resources/Fonts/, и установите свойства шрифта → Действие сборки: ресурс

Второе) Используется в коде

FontFamily="/AssemblyNamespace;component/Resources/Fonts/IranSans/#IRANSansWeb Medium"

enter image description here

Ответ 10

Вам необходимо добавить шрифты в качестве элемента ресурса

по ссылке; Вы можете добавить нужный шрифт в качестве файла ресурсов приложения, выполнив следующие действия:

  1. Скопируйте файл шрифта в любое место вашего проекта. В большинстве случаев файлы ресурсов копируются в папку с именем "resources", если вы хотите выполнить это, создайте новую папку в своем проекте и назовите ее "resources", затем скопируйте файл шрифта, который обычно в эту папку помещается формат ttf или otf

  2. затем вам нужно объявить этот файл как файл ресурсов, для этого у вас есть два варианта:

    1. щелкните правой кнопкой мыши по файлу шрифта, выберите свойства (или нажмите F4 после выбора) а затем измените "Build Action" на "Ресурс"
    2. перейдите в каталог проектов, отредактируйте файл project-name.csproj и следующий тег:

      <ItemGroup>            
          <Resource Include="resources\<font-file-name>.ttf" />  
      </ItemGroup>'''
      

наконец, в вашем приложении вы можете установить свойство font-family следующим образом:

FontFamily="./Resources/Fonts/#<font-name>"

будьте осторожны, 'font-name' отличается от font-file-name. Вы можете открыть файл шрифта и проверить свойство имени шрифта (в Microsoft Window)

fetching font name by opening font file

Ответ 11

Самый простой способ включить внешние шрифты - это

Шаг 1. Создайте папку Fonts и добавьте в нее свои шрифты.

enter image description here

Шаг 2. Установите для параметра "Создать" значение content и для параметра "Копировать в выходной каталог" значение Copy always.

enter image description here

Шаг 3. Постройте решение, чтобы обновить его с помощью каталога Font.

Шаг 4. Используйте шрифт в ваших элементах, используя FontFamily="Fonts/#font name"

enter image description here

Все готово!

Благодаря науке !