Подтвердить что ты не робот

Как рассчитать высоту шрифта в WPF?

Для FontFamily как я могу программно получить/вычислить максимальный диапазон высоты для этого шрифта в определенном FontSize?

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

Мне нужно значение, которое будет принимать во внимание восходящие и спускатели и т.д.

Обновление

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

4b9b3361

Ответ 1

Максимальный диапазон высоты для шрифта можно рассчитать, используя свойство LineSpacing, которое является пропорциональной фигурой для шрифта. Это можно использовать для создания высоты строки, которая может вместить все глифы для этого шрифта в определенном размере.

    FontFamily fontFamily = new FontFamily("Segoe UI");
    double fontDpiSize = 16;

    double fontHeight = Math.Ceiling(fontDpiSize * fontFamily.LineSpacing);

Результат:

   22.0

Эта цифра будет содержать небольшое количество leading, которое желательно при необходимости высоты для строк текста (чтобы восходящие и descenders из соседних строк текста имеют интервал).

введите описание изображения здесь

Ответ 2

Используйте класс System.Windows.Media.FormattedText.

Пример:

FormattedText ft = new FormattedText("Quick Brown Fox Jumps Over A Lazy Dog.",
                                     CultureInfo.CurrentCulture,
                                     CultureInfo.CurrentCulture.TextInfo.IsRightToLeft ? FlowDirection.RightToLeft : FlowDirection.LeftToRight,
                                     new Typeface("Verdana"),
                                     9,
                                     new SolidColorBrush(Colors.White)
Double maxHeight = ft.MaxTextHeight;