如何计算';尺寸';是否在wpf中运行格式化文本或字形?

如何计算';尺寸';是否在wpf中运行格式化文本或字形?,wpf,formatting,glyph,Wpf,Formatting,Glyph,在WPF4中,如何计算格式文本或GlyphRun的大小,以绘制视觉 我在画布上使用drawingvisual。当我更改文本大小或文本时,会发生更改,但实际宽度和高度相同或不会更新 Using dc As DrawingContext = drawingvisual.RenderOpen Dim ft As New FormattedText(...) dc.DrawText(ft, New

在WPF4中,如何计算
格式文本
GlyphRun
大小
,以绘制视觉

我在画布上使用drawingvisual。当我更改文本大小或文本时,会发生更改,但实际宽度和高度相同或不会更新

Using dc As DrawingContext = drawingvisual.RenderOpen                    

                Dim ft As New FormattedText(...)

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

                dc.Close()

End Using

初始化FormattedText后,它的宽度和高度成员等于给定参数的实际渲染大小。事实上,更改参数会立即更新它们,例如:

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作为旁注:我注意到使用DrawingContext.DrawGlyphRun与DrawingContext.DrawFormattedText相比,性能提高了约10倍


GlyphRun没有很好的文档记录,但是一旦阅读,您应该能够理解它是如何工作的。

当您创建GlyphRun时,您已经为它提供了每个字符的高级宽度,因此您可以为宽度添加这些宽度。要获得高度,请使用GlyphTypeface.Baseline*FontSize。