Узнать размеры текста до его отображения

Рейтинг: 0Ответов: 1Опубликовано: 10.04.2023

Подскажите, пожалуйста, как узнать размер текста еще до его отображения?

У меня есть массив TextBlock с текстом. Мне нужно узнать длину максимального из их, и обернуть их в Border этого размера до отображения.

Ответы

▲ 0

Используйте FormattedText.

public Size GetTextPixelLength(string value, TextBlock textBlock)
{
    var formattedText = new FormattedText(
        value,
        CultureInfo.CurrentCulture,
        FlowDirection.LeftToRight,
        new Typeface(textBlock.FontFamily,
                     textBlock.FontStyle,
                     textBlock.FontWeight,
                     textBlock.FontStretch),
        textBlock.FontSize,
        Brushes.Black,
        new NumberSubstitution(),
        VisualTreeHelper.GetDpi(textBlock).PixelsPerDip);

    return new Size(formattedText.Width, formattedText.Height);
}