Как включить внешний шрифт в приложение 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.

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

  

#HATTEN – ссылка на hatten.tft в разделе Ресурсы.

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

   

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

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

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

             
  6. В App.xaml добавьте App.xaml . Он должен выглядеть в следующем примере кода. Обратите внимание, что URI не содержит имя файла при упаковке с приложением.

       pack://application:,,,/Fonts/#Noto Sans pack://application:,,,/Fonts/#Noto Sans Symbols   
  7. Примените свои шрифты следующим образом:

      
  8. Вы также можете установить шрифт по необходимости:

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

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

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

        PreserveNewest   PreserveNewest   PreserveNewest   PreserveNewest   PreserveNewest   
  6. В App.xaml добавьте App.xaml . Он должен выглядеть в следующем примере кода. Обратите внимание, что URI не содержит имя файла при упаковке с приложением.

       ./Fonts/NotoSans-Regular.tts#Noto Sans ./Fonts/NotoSans-Italic.tts#Noto Sans ./Fonts/NotoSans-Bold.tts#Noto Sans ./Fonts/NotoSans-BoldItalic.tts#Noto Sans ./Fonts/NotoSans-Regular.tts#Noto Sans Symbols   
  7. Примените свои шрифты следующим образом:

      

Рекомендации

  • MSDN: упаковочные шрифты с приложениями

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

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

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

  

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

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

  2. Не забудьте поставить символ «#» перед именем шрифта. Это не будет работать иначе.

  3. Пользовательский шрифт также может быть добавлен в проект с настройкой «Build Action» на «Content». Однако этого не рекомендуется, и для простоты я проигнорировал эту возможность.

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

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

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

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

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

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

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

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

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

  

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

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

  

Вот что для меня работало:

(1) Добавить директорию в проект: шрифт

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

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

(4) Установите свойство «Build» файла шрифта tff в «Resource» (Примечание: я использовал «Resource» вместо «Embedded Resource» в списке combobox).

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

    pack://application:,,,/font/#NameOfFont       This is a test    ...  

(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; } ... } 

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

pack://application:,,,./Fonts/#Noto Sans

  • Как преобразовать растровый шрифт (.FON) в шрифт truetype (.TTF)?
  • FontAwesome - выбор правильного семейства шрифтов в псевдоэлементах CSS
  • Как я могу использовать собственный шрифт в Java?
  • Как установить конкретный шрифт для текста кнопки в android?
  • Могу ли я подчеркнуть текст в макете Android?
  • Подождите, пока шрифты загрузятся до рендеринга веб-страницы
  • CSS Font Border?
  • Использование пользовательского (ttf) шрифта в CSS
  • Правильный MIME-тип для .woff2-шрифтов
  • Использование пользовательского шрифта в android TextView с помощью xml
  • Изменение размера шрифта на основе шрифта-семейства с помощью jQuery
  • Interesting Posts

    конвертировать список объектов из одного типа в другой, используя выражение lambda

    Вычислить расстояние между 2 координатами GPS

    Что такое пул строк в Java?

    Сортировка точек по часовой стрелке?

    Эквивалент фильтра содержимого K9 для Ubuntu

    Remap Copy и вставка ярлыков на Mac

    Excel – сопоставление значений в столбцах на разных вкладках, а затем вставка в другой столбец, если есть совпадение

    Разбиение строки на новые строки в R

    Пакет для открытия файлов с тем же расширением в подпапках в Windows

    ANDROID, данные Parse JSON с веб-сервера и отображение в ListView

    Настройка глобальных стилей для Views в Android

    Процессор горячий и процессорный вентилятор, создающий очень много RPM и много шума. (Вентилятор процессора не указан в speedfan)

    Какой лучший бесплатный способ удаления дубликатов файлов из iTunes?

    Рекурсивная блокировка (Mutex) против нерекурсивной блокировки (Mutex)

    Алгоритм для выбора одной, случайной комбинации значений?

    Давайте будем гением компьютера.