Как измерить многострочный текст в WPF? - PullRequest
0 голосов
/ 17 октября 2018

Название действительно говорит само за себя ... Мне нужно знать, как измерить многострочный текст в WPF.Я действительно не могу поверить, что этот вопрос еще не задавался здесь.

Я нашел решения для измерения однострочного текста в WPF ( WPF, эквивалентного TextRenderer ) или многострочного текста в Windows Forms ( C # - Измерение ширины и высоты строки (в пикселях) Включая многострочный текст ), но не многострочный текст в WPF.Я не могу использовать DLL-библиотеку Windows Forms, потому что мне нужно измерить строки в проекте, не основанном на пользовательском интерфейсе, где DLL-файлы пользовательского интерфейса не приветствуются.

Чтобы пояснить далее, мне нужен метод, такой как Graphics.MeasureString метод, в который я могу передать заданную ширину, который будет возвращать высоту в пикселях, необходимую для визуализации строки в пользовательском интерфейсе ... которую можно использовать без использования DLL, связанных с пользовательским интерфейсом.

1 Ответ

0 голосов
/ 17 октября 2018

Вы можете создать экземпляр FormattedText и установить его свойство MaxTextWidth, которое делает перенос текста.Затем либо получите Bounds его геометрии, либо, возможно, только его высоту из свойства Extent:

var testString = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor";

var formattedText = new FormattedText(
    testString,
    CultureInfo.InvariantCulture,
    FlowDirection.LeftToRight,
    new Typeface("Segoe UI"),
    20,
    Brushes.Black);

formattedText.MaxTextWidth = 200;

var bounds = formattedText.BuildGeometry(new Point(0, 0)).Bounds;
var height = formattedText.Extent;

Однако не уверен, почему height и bounds.Height не совсем равны.

...