6

在 WPF4 中,我如何'Size'计算aFormattedText或.GlyphRundrawingvisual

我在画布中使用绘图视觉。当我更改文本大小或文本时,会发生更改,但实际宽度和高度相同或未更新。

Using dc As DrawingContext = drawingvisual.RenderOpen                    

                Dim ft As New FormattedText(...)

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

                dc.Close()

End Using
4

2 回答 2

6

初始化 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

于 2011-07-19T18:49:46.023 回答
4

顺便说一句:我注意到使用 DrawingContext.DrawGlyphRun 与 DrawingContext.DrawFormattedText 时性能提高了大约 10 倍。

GlyphRun 没有很好的文档,但是一旦你阅读了这篇文章,你应该能够理解它是如何工作的。

于 2013-03-31T04:35:48.923 回答