Страницы

Поиск по вопросам

понедельник, 19 ноября 2018 г.

Некорректный шрифт при загрузке из файла в WPF

Загружаю шрифт в программу посредством
GetNonCachedFontFamilies(MainPath).FirstOrDefault();
Метод GetNonCachedFontFamilies
public static IEnumerable GetNonCachedFontFamilies(string location) { if (string.IsNullOrEmpty("location")) throw new ArgumentException("Must provide a location", "location");
DirectoryInfo directoryInfo = new DirectoryInfo(location); if (directoryInfo.Exists) { FileInfo[] fileInfos = directoryInfo.GetFiles("*.?tf"); foreach (FileInfo fileInfo in fileInfos) yield return CreateFontFamily(fileInfo.FullName); } else { FileInfo fileInfo = new FileInfo(location); if (fileInfo.Exists) yield return CreateFontFamily(location); } }
Метод CreateFontFamily
private static FontFamily CreateFontFamily(string path) { if (!Uri.TryCreate(path, UriKind.Absolute, out Uri uri)) throw new ArgumentException("Must provide a valid location", "path");
return new FontFamily(uri, string.Empty); }
Шрифт программа находит и загружает, с этим проблем нет. Только отображается шрифт не правильно. Это должен быть рукописный кириллический шрифт, а похож на Microsoft Sans Serif/Calibri (т.е. не рукописный). Что я не так делаю? Если что, текст отображаю посредством TextBlock, который динамически создаётся из кода. Прошу без xaml.


Ответ

Вы неправильно используете функцию new FontFamily(uri, string.Empty), надо обязательно использовать имя шрифта. Ниже рабочий код.
public static IEnumerable GetNonCachedFontFamilies(string location) { if (string.IsNullOrEmpty("location")) throw new ArgumentException("Must provide a location", "location");
DirectoryInfo directoryInfo = new DirectoryInfo(location); if (directoryInfo.Exists) { FileInfo[] fileInfos = directoryInfo.GetFiles("*.?tf"); foreach (FileInfo fileInfo in fileInfos) yield return CreateFontFamily(fileInfo.DirectoryName, fileInfo.Name); } else { FileInfo fileInfo = new FileInfo(location); if (fileInfo.Exists) yield return CreateFontFamily(fileInfo.DirectoryName, fileInfo.Name); } }
private static FontFamily CreateFontFamily(string path, string filename) { if (!Uri.TryCreate(path + "\\" + filename, UriKind.Absolute, out Uri uri)) throw new ArgumentException("Must provide a valid location", "path");
GlyphTypeface glyphTypeface = new GlyphTypeface(uri); return new FontFamily(path + "\\#" + glyphTypeface.FamilyNames.FirstOrDefault().Value); }

Комментариев нет:

Отправить комментарий