#c_sharp #wpf #шрифты
Загружаю шрифт в программу посредством GetNonCachedFontFamilies(MainPath).FirstOrDefault(); Метод GetNonCachedFontFamilies public static IEnumerableGetNonCachedFontFamilies(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.
Ответы
Ответ 1
Вы неправильно используете функцию new FontFamily(uri, string.Empty), надо обязательно использовать имя шрифта. Ниже рабочий код. public static IEnumerableGetNonCachedFontFamilies(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); }
Комментариев нет:
Отправить комментарий