FormattedText.GetMaxTextWidths возвращает ноль - почему? - PullRequest
0 голосов
/ 26 сентября 2010

Я пытаюсь выяснить, насколько широк текст. Это мой код:

FormattedText ft = new FormattedText("Line 1\r\nLine 2",
                System.Globalization.CultureInfo.CurrentCulture,
                System.Windows.FlowDirection.LeftToRight,
                new Typeface(FontFamily, FontStyle, FontWeight, FontStretch),
                fontSize,
                brush);
double[] w = ft.GetMaxTextWidths();

Проблема в том, что w всегда равно нулю. Ты знаешь почему?

1 Ответ

1 голос
/ 26 сентября 2010

FormattedTextClass не говорит вам, какова максимальная ширина линии. Это работает наоборот; Вы указываете ему максимальную ширину, и он выясняет, как отобразить текст.

Эта статья MSDN содержит больше информации: Рисунок отформатированного текста

Взяв пример кода и переопределив событие OnRender окна, вот как выглядит строка текста, когда на ширину не накладывается никаких ограничений:

alt text

когда MaxTextWidth установлено на 300:

alt text

и когда вызывается SetMaxTextWidths, передавая двойной массив { 200, 500, 100 } (последняя ширина используется для всех оставшихся строк, когда строк больше, чем элементов массива):

alt text

Во всех приведенных выше примерах я оставил для MaxTextHeight значение 240.

Пара замечаний, если вы хотите запустить код из статьи в событии OnRender для Window:

  • Установить окно Background собственность до Transparent
  • Добавьте строку кода, чтобы нарисовать белый фон за текстом:

// Draw a white background
drawingContext.DrawRectangle(Brushes.White, null, new Rect(new Point(0, 0), new Size(this.Width, this.Height)));

// Draw the formatted text string to the DrawingContext of the control.
drawingContext.DrawText(formattedText, new Point(10, 10));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...