Как рассчитать «Размер» FormattedText или GlyphRun в wpf? - PullRequest
6 голосов
/ 16 июля 2011

В WPF4, как я могу вычислить 'Size' из FormattedText или GlyphRun для drawingvisual.

Я использую рисунок на холсте. Когда я изменяю размер текста или текст, изменения происходят, но фактическая ширина и высота не изменяются.

Using dc As DrawingContext = drawingvisual.RenderOpen                    

                Dim ft As New FormattedText(...)

                dc.DrawText(ft, New Point(0, 0))

                dc.Close()

End Using

Ответы [ 2 ]

6 голосов
/ 19 июля 2011

После того, как вы инициализировали FormattedText, он имеет члены Width и Height, которые равны его фактическому отображаемому размеру с учетом его параметров. Фактически, изменение параметров обновляет их немедленно, например,:

FormattedText ft = new FormattedText(cellString, CultureInfo.CurrentCulture, FlowDirection.LeftToRight, fontFace, fontSize, fontBrush);
ft.Trimming = TextTrimming.CharacterEllipsis;
double originalHeight = ft.Height;
double width = ft.Width;
ft.MaxTextWidth = bCellRect.Width;    // Set the width to get a new height
double height = ft.Height;

Редактировать для GlyphRun: Когда вы создали свой GlyphRun, вы уже дали ему ширину продвижения для каждого символа, поэтому вы добавляете их для ширины. Чтобы получить высоту, используйте GlyphTypeface.Baseline * FontSize

3 голосов
/ 31 марта 2013

Как примечание: я заметил увеличение производительности примерно в 10 раз при использовании DrawingContext.DrawGlyphRun против DrawingContext.DrawFormattedText.

GlyphRun плохо документирован, но как только вы прочитаете эту статью , вы сможете понять, как она работает.

...