2011-07-16 20 views
6

En WPF4, ¿cómo puedo calcular el 'Size' de FormattedText o GlyphRun para un drawingvisual.cómo calcular 'Tamaño' de FormattedText o GlyphRun en wpf?

Estoy usando drawingvisual en un lienzo. Cuando cambio el tamaño del texto o el texto, se producen cambios, pero el ancho real y la altura son iguales o no se actualizan.

Using dc As DrawingContext = drawingvisual.RenderOpen      

       Dim ft As New FormattedText(...) 

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

       dc.Close() 

End Using 

Respuesta

6

Una vez que haya inicializado el FormattedText, que tiene una anchura y altura miembros que son iguales a su tamaño real rendido debido a sus parámetros. De hecho, el cambio de los parámetros de los actualiza inmediatamente, e, g ,:

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; 

Editar para GlyphRun: Cuando creó su GlyphRun que ya le dieron el ancho de avance para cada personaje, por lo que añadir los de la anchura . Para obtener la altura, use el GlyphTypeface.Baseline * FontSize

+0

¿Qué pasa con 'GlyphRun'? – Code0987

+0

Cuando creaste tu GlyphRun, ya le diste los anchos de avance para cada personaje, por lo que debes agregarlos para el ancho. Para obtener la altura, use GlyphTypeface.Baseline * FontSize. –

+0

Por favor, edite su respuesta y agregue aproximadamente 'GlyphRun' a ella. – Code0987

3

Como nota al margen: he notado un aumento del rendimiento de 10x al usar DrawingContext.DrawGlyphRun vs DrawingContext.DrawFormattedText.

GlyphRun no está bien documentado, pero una vez que lea this article debería ser capaz de entender cómo funciona.

Cuestiones relacionadas