Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tema se proporciona información general sobre las características del FormattedText objeto . Este objeto proporciona un control de bajo nivel para dibujar texto en aplicaciones de Windows Presentation Foundation (WPF).
Introducción a la tecnología
El FormattedText objeto permite dibujar texto de varias líneas, en el que cada carácter del texto se puede formatear individualmente. En el ejemplo siguiente se muestra el texto que tiene varios formatos aplicados.
Nota:
Para aquellos desarrolladores que migran desde la API de Win32, la tabla de la sección Migración de Win32 enumera las marcas DrawText de Win32 y el equivalente aproximado en Windows Presentation Foundation (WPF).
Motivos para usar texto con formato
WPF incluye varios controles para dibujar texto en la pantalla. Cada control está dirigido a un escenario diferente y tiene su propia lista de características y limitaciones. En general, el TextBlock elemento debe usarse cuando se requiere compatibilidad limitada con texto, como una frase breve en una interfaz de usuario (UI). Label se puede usar cuando se requiere compatibilidad mínima con texto. Para obtener más información, vea Documentos en WPF.
El FormattedText objeto proporciona características de formato de texto mayores que los controles de texto de Windows Presentation Foundation (WPF) y puede ser útil en los casos en los que desea usar texto como elemento decorativo. Para obtener más información, consulte la sección siguiente Conversión de texto con formato a una geometría.
Además, el FormattedText objeto es útil para crear objetos derivados DrawingVisualorientados a texto. DrawingVisual es una clase de dibujo ligera que se usa para representar formas, imágenes o texto. Para obtener más información, vea Prueba de posicionamiento mediante drawingVisuals Sample.
Usar el objeto FormattedText
Para crear texto con formato, llame al FormattedText constructor para crear un FormattedText objeto . Una vez creada la cadena de texto con formato inicial, puede aplicar un intervalo de estilos de formato.
Use la MaxTextWidth propiedad para restringir el texto a un ancho específico. El texto se ajustará automáticamente para evitar superar el ancho especificado. Use la MaxTextHeight propiedad para restringir el texto a un alto específico. El texto mostrará los puntos suspensivos, "..." para el texto que supera el alto especificado.
Puede aplicar varios estilos de formato a uno o varios caracteres. Por ejemplo, podría llamar a los métodos SetFontSize y SetForegroundBrush para cambiar el formato de los cinco primeros caracteres del texto.
En el ejemplo de código siguiente se crea un FormattedText objeto y, a continuación, se aplican varios estilos de formato al texto.
protected override void OnRender(DrawingContext drawingContext)
{
string testString = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor";
// Create the initial formatted text string.
FormattedText formattedText = new FormattedText(
testString,
CultureInfo.GetCultureInfo("en-us"),
FlowDirection.LeftToRight,
new Typeface("Verdana"),
32,
Brushes.Black);
// Set a maximum width and height. If the text overflows these values, an ellipsis "..." appears.
formattedText.MaxTextWidth = 300;
formattedText.MaxTextHeight = 240;
// Use a larger font size beginning at the first (zero-based) character and continuing for 5 characters.
// The font size is calculated in terms of points -- not as device-independent pixels.
formattedText.SetFontSize(36 * (96.0 / 72.0), 0, 5);
// Use a Bold font weight beginning at the 6th character and continuing for 11 characters.
formattedText.SetFontWeight(FontWeights.Bold, 6, 11);
// Use a linear gradient brush beginning at the 6th character and continuing for 11 characters.
formattedText.SetForegroundBrush(
new LinearGradientBrush(
Colors.Orange,
Colors.Teal,
90.0),
6, 11);
// Use an Italic font style beginning at the 28th character and continuing for 28 characters.
formattedText.SetFontStyle(FontStyles.Italic, 28, 28);
// Draw the formatted text string to the DrawingContext of the control.
drawingContext.DrawText(formattedText, new Point(10, 0));
}
Protected Overrides Sub OnRender(ByVal drawingContext As DrawingContext)
Dim testString As String = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor"
' Create the initial formatted text string.
Dim formattedText As New FormattedText(testString, CultureInfo.GetCultureInfo("en-us"), FlowDirection.LeftToRight, New Typeface("Verdana"), 32, Brushes.Black)
' Set a maximum width and height. If the text overflows these values, an ellipsis "..." appears.
formattedText.MaxTextWidth = 300
formattedText.MaxTextHeight = 240
' Use a larger font size beginning at the first (zero-based) character and continuing for 5 characters.
' The font size is calculated in terms of points -- not as device-independent pixels.
formattedText.SetFontSize(36 * (96.0 / 72.0), 0, 5)
' Use a Bold font weight beginning at the 6th character and continuing for 11 characters.
formattedText.SetFontWeight(FontWeights.Bold, 6, 11)
' Use a linear gradient brush beginning at the 6th character and continuing for 11 characters.
formattedText.SetForegroundBrush(New LinearGradientBrush(Colors.Orange, Colors.Teal, 90.0), 6, 11)
' Use an Italic font style beginning at the 28th character and continuing for 28 characters.
formattedText.SetFontStyle(FontStyles.Italic, 28, 28)
' Draw the formatted text string to the DrawingContext of the control.
drawingContext.DrawText(formattedText, New Point(10, 0))
End Sub
Unidad de medida de tamaño de fuente
Al igual que con otros objetos de texto en aplicaciones de Windows Presentation Foundation (WPF), el FormattedText objeto usa píxeles independientes del dispositivo como unidad de medida. Sin embargo, la mayoría de las aplicaciones Win32 usan puntos como unidad de medida. Si quieres usar texto para mostrar en unidades de puntos en aplicaciones de Windows Presentation Foundation (WPF), debes convertir unidades independientes del dispositivo (1/96 pulgadas por unidad) a puntos. En el ejemplo de código siguiente se muestra cómo realizar esta conversión.
// The font size is calculated in terms of points -- not as device-independent pixels.
formattedText.SetFontSize(36 * (96.0 / 72.0), 0, 5);
' The font size is calculated in terms of points -- not as device-independent pixels.
formattedText.SetFontSize(36 * (96.0 / 72.0), 0, 5)
Convertir texto con formato a una geometría
Puede convertir texto con formato en Geometry objetos, lo que le permite crear otros tipos de texto visualmente interesantes. Por ejemplo, podría crear un Geometry objeto basado en el esquema de una cadena de texto.
En los ejemplos siguientes se muestran varias formas de crear efectos visuales interesantes modificando el trazo, el relleno y el resaltado del texto convertido.
Cuando el texto se convierte en un Geometry objeto, ya no es una colección de caracteres; no se pueden modificar los caracteres de la cadena de texto. Sin embargo, puede afectar a la apariencia del texto convertido modificando sus propiedades de trazo y relleno. El trazo hace referencia al contorno del texto convertido; el relleno hace referencia al área dentro del contorno del texto convertido. Para obtener más información, vea Crear texto descrito.
También puede convertir texto con formato en un PathGeometry objeto y usar el objeto para resaltar el texto. Por ejemplo, podría aplicar una animación al PathGeometry objeto para que la animación siga el contorno del texto con formato.
En el ejemplo siguiente se muestra el texto con formato convertido en un PathGeometry objeto . Una elipse animada sigue la ruta de acceso de los trazos del texto representado.
Esfera siguiendo la geometría del camino del texto
Para obtener más información, vea How to: Create a PathGeometry Animation for Text.
Puede crear otros usos interesantes para el texto con formato una vez convertido en un PathGeometry objeto . Por ejemplo, puede recortar vídeo para mostrarlo dentro de él.
Migración de Win32
Las características de FormattedText para dibujar texto son similares a las de la función DrawText de Win32. Para aquellos desarrolladores que migran desde la API de Win32, en la tabla siguiente se enumeran las marcas DrawText de Win32 y el equivalente aproximado en Windows Presentation Foundation (WPF).
Marca DrawText | Equivalente de WPF | Notas |
---|---|---|
DT_BOTTOM | Height | Utiliza la propiedad Height para calcular una posición 'y' adecuada en DrawText de Win32. |
DT_CALCRECT | Height, Width | Use las Height propiedades y Width para calcular el rectángulo de salida. |
DT_CENTER | TextAlignment | Utiliza la TextAlignment propiedad con el valor establecido en Center. |
DT_EDITCONTROL | Ninguno | No es necesario. El ancho del espacio y la representación de la última línea son los mismos que en el control de edición del marco de trabajo. |
DT_END_ELLIPSIS | Trimming | Use la Trimming propiedad con el valor CharacterEllipsis. ** Use WordEllipsis para obtener el efecto de DT_END_ELLIPSIS de Win32 con DT_WORD_ELIPSIS y elipsis al final; en este caso, los puntos suspensivos solo aparecen en palabras que no caben en una sola línea. |
DT_EXPAND_TABS | Ninguno | No es necesario. Las pestañas se expanden automáticamente hasta paradas cada 4 ems, lo cual es aproximadamente el ancho de 8 caracteres independientes del idioma. |
DT_EXTERNALLEADING | Ninguno | No es necesario. El interlineado externo siempre se incluye en el espaciado de líneas. Usa la propiedad LineHeight para crear espaciado de línea definido por el usuario. |
DT_HIDEPREFIX | Ninguno | No está soportado. Quite el '&' de la cadena antes de construir el FormattedText objeto. |
DT_LEFT | TextAlignment | Esta es la alineación de texto predeterminada. Utiliza la TextAlignment propiedad con el valor establecido en Left. (solo WPF) |
DT_MODIFYSTRING | Ninguno | No está soportado. |
DT_NOCLIP | VisualClip | El recorte no se produce automáticamente. Si desea recortar texto, use la VisualClip propiedad . |
DT_NOFULLWIDTHCHARBREAK | Ninguno | No está soportado. |
DT_NOPREFIX | Ninguno | No es necesario. El carácter '&' de las cadenas siempre se trata como un carácter normal. |
DT_PATHELLIPSIS | Ninguno | Use la Trimming propiedad con el valor WordEllipsis. |
DT_PREFIX | Ninguno | No está soportado. Si desea usar caracteres de subrayado para texto, como una tecla de aceleración o un vínculo, use el SetTextDecorations método . |
DT_PREFIXONLY | Ninguno | No está soportado. |
DT_RIGHT | TextAlignment | Utiliza la TextAlignment propiedad con el valor establecido en Right. (solo WPF) |
DT_RTLREADING | FlowDirection | Establezca la propiedad FlowDirection en RightToLeft. |
DT_SINGLELINE | Ninguno | No es necesario. FormattedText los objetos se comportan como un solo control de línea, a menos que se establezca la MaxTextWidth propiedad o el texto contenga un retorno de carro/avance de línea (CR/LF). |
DT_TABSTOP | Ninguno | No se admiten posiciones de tabuladores definidas por el usuario. |
DT_TOP | Height | No es necesario. La justificación superior es el valor predeterminado. Otros valores de posicionamiento vertical se pueden definir mediante la Height propiedad para calcular una posición adecuada de DrawText 'y' de Win32. |
DT_VCENTER | Height | Utiliza la propiedad Height para calcular una posición 'y' adecuada en DrawText de Win32. |
DT_WORDBREAK | Ninguno | No es necesario. La separación de palabras se produce automáticamente con objetos FormattedText. No se puede deshabilitar. |
DT_WORD_ELLIPSIS | Trimming | Use la Trimming propiedad con el valor WordEllipsis. |
Consulte también
.NET Desktop feedback