Страницы

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

понедельник, 23 декабря 2019 г.

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

#c_sharp #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.
    


Ответы

Ответ 1



Вы неправильно используете функцию 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); }

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

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