Установите FontFamily из файла в C# WPFC#

Место общения программистов C#
Ответить
Anonymous
 Установите FontFamily из файла в C# WPF

Сообщение Anonymous »

Я пишу программу, которая имеет два TextBlock с каждым конкретным набором FontFamily. Я устанавливаю каждый шрифт, используя его переменную FontFamily. Переменные FontFamily устанавливаются в методе, который загружается из определенных файлов .ttf. Они могут быть установлены или не установлены в системе.
Мне не удалось найти способ установить FontFamily из файла .ttf, поскольку файлы .ttf не могут быть сохранены программой (файлы шрифтов заменяют среду выполнения).
Некоторые из моих попыток

Код: Выделить всё

String textFontName = "nameOfFont";

FontFamily textFont = new FontFamily(new Uri(AppDomain.CurrentDomain.BaseDirectory + "/themes/tmp/text/#" + textFontName, UriKind.Absolute), textFontName); // Not Work if font is not installed
Изменить: Этот:

Код: Выделить всё

textFont = new FontFamily("file:///" + AppDomain.CurrentDomain.BaseDirectory + "/themes/tmp/text/#" + textFontName);
а это очень интересно:

Код: Выделить всё

textFont = new FontFamily(new Uri(AppDomain.CurrentDomain.BaseDirectory + "/themes/tmp/text/text.ttf", UriKind.Absolute), "./#" + textFontName);
При первом запуске метода:
Изображение

Запускаем метод второй раз:
Изображение

Я также использую AddFontResourceW, возвращает 1, и система сохраняет файл шрифта, но шрифт TextBlock по-прежнему является шрифтом по умолчанию:

Код: Выделить всё

AddFontResourceW(AppDomain.CurrentDomain.BaseDirectory + "themes\\tmp\\text\\text.ttf");
SendMessageW(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
это программа WPF, поэтому PrivateFontCollection не работает. Какие еще есть способы установить шрифт из файла шрифта?
Обновление: Я нашел это

Код: Выделить всё

textFont = new FontFamily("file:///" + AppDomain.CurrentDomain.BaseDirectory + "/themes/tmp/text/#" + textFontName);
и это

Код: Выделить всё

textFont = new FontFamily(new Uri(AppDomain.CurrentDomain.BaseDirectory + "/themes/tmp/text/text.ttf", UriKind.Absolute), "./#" + textFontName);
Работает, но пока шрифт не заменен. если я заменю text.ttf на другие шрифты (или заменю его самим собой), шрифт сломается (это изображение)

Подробнее здесь: https://stackoverflow.com/questions/612 ... -sharp-wpf
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»