Bloque de texto

El bloque de texto es el control principal para mostrar texto de solo lectura en aplicaciones. Puede usarlo para mostrar texto de una sola línea o de varias líneas, hipervínculos en línea y texto con formato como negrita, cursiva o subrayado.

¿Es este el control adecuado?

Normalmente, un bloque de texto es más fácil de usar y proporciona un mejor rendimiento de representación de texto que un bloque de texto enriquecido, por lo que es preferible para la mayoría del texto de la interfaz de usuario de la aplicación. Puedes acceder y usar fácilmente texto desde un bloque de texto en la aplicación obteniendo el valor de la propiedad Text . También proporciona muchas de las mismas opciones de formato para personalizar cómo se representa el texto.

Aunque puedes incluir saltos de línea en el texto, el bloque de texto está diseñado para mostrar un único párrafo y no admite la sangría del texto. Use un RichTextBlock cuando necesite compatibilidad con varios párrafos, texto de varias columnas u otros diseños de texto complejos o elementos de interfaz de usuario insertados como imágenes.

Para obtener más información sobre cómo elegir el control de texto correcto, consulta el artículo Controles de texto.

UWP y WinUI 2

Importante

La información y los ejemplos de este artículo están optimizados para aplicaciones que usan el SDK de Aplicaciones para Windows y WinUI 3, pero generalmente son aplicables a las aplicaciones para UWP que usan WinUI 2. Consulte el material de referencia de las API de UWP para obtener información y ejemplos específicos de la plataforma.

Esta sección contiene información que necesita para usar el control en una aplicación para UWP o WinUI 2.

Existen API para este control en el espacio de nombres Windows.UI.Xaml.Controls.

Se recomienda usar la versión más reciente de WinUI 2 para obtener los estilos, las plantillas y las características más actuales de todos los controles.

Creación de un bloque de texto

La aplicación WinUI 3 Gallery incluye ejemplos interactivos de la mayoría de los controles, características y funcionalidades de WinUI 3. Obtenga la aplicación de Microsoft Store u obtenga el código fuente en GitHub.

Aquí se muestra cómo definir un control TextBlock simple y establecer su propiedad Text en una cadena.

<TextBlock Text="Hello, world!" />
TextBlock textBlock1 = new TextBlock();
textBlock1.Text = "Hello, world!";

Modelo de contenido

Hay dos propiedades que puede usar para agregar contenido a un TextBlock: Text e Inlines.

La forma más común de mostrar texto es establecer la propiedad Text en un valor de cadena, como se muestra en el ejemplo anterior.

También puede agregar contenido colocando elementos de contenido de flujo insertados en la propiedad TextBox.Inlines, como esta.

<TextBlock>Text can be <Bold>bold</Bold>, <Underline>underlined</Underline>, 
    <Italic>italic</Italic>, or a <Bold><Italic>combination</Italic></Bold>.</TextBlock>

Los elementos derivados de la clase Inline, como Bold, Italic, Run, Span y LineBreak, permiten un formato diferente para diferentes partes del texto. Para obtener más información, consulta la sección Formato de texto . El elemento Hyperlink insertado le permite agregar un hipervínculo al texto. Sin embargo, el uso de Inlines también deshabilita la representación de texto de ruta de acceso rápida, que se describe en la sección siguiente.

Consideraciones sobre el rendimiento

Siempre que sea posible, XAML usa una ruta de acceso de código más eficaz al texto de diseño. Esta ruta de acceso rápida reduce el uso general de la memoria y reduce considerablemente el tiempo de CPU para realizar la medición y la organización del texto. Esta ruta de acceso rápida solo se aplica a TextBlock, por lo que debe ser preferible cuando sea posible sobre RichTextBlock.

Algunas condiciones requieren que TextBlock se revierta a una ruta de acceso de código con mucho uso intensivo de características y CPU para la representación de texto. Para mantener la representación de texto en la ruta de acceso rápida, asegúrese de seguir estas instrucciones al establecer las propiedades enumeradas aquí.

  • Texto: la condición más importante es que la ruta de acceso rápida solo se usa cuando estableces texto estableciendo explícitamente la propiedad Text, ya sea en XAML o en código (como se muestra en los ejemplos anteriores). Establecer el texto a través de la colección Inlines de TextBlock (como <TextBlock>Inline text</TextBlock>), deshabilitará la ruta de acceso rápido debido a la posible complejidad de varios formatos.
  • CharacterSpacing: solo el valor predeterminado de 0 es la ruta de acceso rápida.
  • TextTrimming: solo los valores None, CharacterEllipsis y WordEllipsis son una ruta de acceso rápida. El valor clip deshabilita la ruta de acceso rápida.

Nota Antes de Windows 10, versión 1607, las propiedades adicionales también afectan a la ruta de acceso rápida. Si la aplicación se ejecuta en una versión anterior de Windows, estas condiciones también harán que el texto se represente en la ruta de acceso lenta. Para obtener más información sobre las versiones, consulte Código adaptativo para versiones.

  • Tipografía: solo los valores predeterminados de las distintas propiedades de tipografía son ruta de acceso rápida.
  • LineStackingStrategy: si LineHeight no es 0, los valores BaselineToBaseline y MaxHeight deshabilitan la ruta de acceso rápida.
  • IsTextSelectionEnabled: solo false es la ruta de acceso rápida. Al establecer esta propiedad en true , se deshabilita la ruta de acceso rápida.

Puede establecer la propiedad DebugSettings.IsTextPerformanceVisualizationEnabled en true durante la depuración para determinar si el texto usa la representación rápida de la ruta de acceso. Cuando esta propiedad se establece en true, el texto que se encuentra en la ruta de acceso rápida se muestra en un color verde brillante.

Sugerencia Esta característica se explica en profundidad en esta sesión de la compilación 2015- Rendimiento XAML: Técnicas para maximizar experiencias de aplicaciones universales de Windows compiladas con XAML.

Normalmente, estableces la configuración de depuración en la invalidación del método OnLaunched en la página de código subyacente de App.xaml, de la siguiente manera.

protected override void OnLaunched(LaunchActivatedEventArgs e)
{
#if DEBUG
    if (System.Diagnostics.Debugger.IsAttached)
    {
        this.DebugSettings.IsTextPerformanceVisualizationEnabled = true;
    }
#endif

// ...

}

En este ejemplo, el primer TextBlock se representa mediante la ruta de acceso rápida, mientras que el segundo no lo es.

<StackPanel>
    <TextBlock Text="This text is on the fast path."/>
    <TextBlock>This text is NOT on the fast path.</TextBlock>
<StackPanel/>

Cuando ejecutas este XAML en modo de depuración con IsTextPerformanceVisualizationEnabled establecido en true, el resultado tendrá este aspecto.

Texto representado en modo de depuración

Precaución

No se cambia el color del texto que no está en la ruta de acceso rápida. Si tiene texto en la aplicación con su color especificado como verde brillante, todavía se muestra en verde brillante cuando se encuentra en la ruta de representación más lenta. Tenga cuidado de no confundir el texto establecido en verde en la aplicación con texto que se encuentra en la ruta de acceso rápida y verde debido a la configuración de depuración.

Formato de texto

Aunque la propiedad Text almacena texto sin formato, puedes aplicar varias opciones de formato al control TextBlock para personalizar cómo se representa el texto en la aplicación. Puede establecer propiedades de control estándar como FontFamily, FontSize, FontStyle, Foreground y CharacterSpacing para cambiar el aspecto del texto. También puede usar elementos de texto insertados y propiedades adjuntas tipográficas para dar formato al texto. Estas opciones afectan solo a la forma en que TextBlock muestra el texto localmente, por lo que si copia y pega el texto en un control de texto enriquecido, por ejemplo, no se aplica ningún formato.

Nota:

Recuerde que, como se indicó en la sección anterior, los elementos de texto insertados y los valores de tipografía no predeterminados no se representan en la ruta de acceso rápida.

Elementos insertados

El espacio de nombres Microsoft.UI.Xaml.Documents proporciona una variedad de elementos de texto insertados que puedes usar para dar formato al texto, como Bold, Italic, Run, Span y LineBreak.

Puede mostrar una serie de cadenas en un TextBlock, donde cada cadena tiene un formato diferente. Puede hacerlo mediante un elemento Run para mostrar cada cadena con su formato y separando cada elemento Run con un elemento LineBreak.

Aquí se muestra cómo definir varias cadenas de texto con formato diferente en un TextBlock mediante el uso de objetos Run separados con lineBreak.

<TextBlock FontFamily="Segoe UI" Width="400" Text="Sample text formatting runs">
    <LineBreak/>
    <Run Foreground="Gray" FontFamily="Segoe UI Light" FontSize="24">
        Segoe UI Light 24
    </Run>
    <LineBreak/>
    <Run Foreground="Teal" FontFamily="Georgia" FontSize="18" FontStyle="Italic">
        Georgia Italic 18
    </Run>
    <LineBreak/>
    <Run Foreground="Black" FontFamily="Arial" FontSize="14" FontWeight="Bold">
        Arial Bold 14
    </Run>
</TextBlock>

Este es el resultado.

Texto con formato con elementos de ejecución

Tipografía

Las propiedades adjuntas de la clase Typography proporcionan acceso a un conjunto de propiedades tipográficas de Microsoft OpenType. Puede establecer estas propiedades adjuntas en textBlock o en elementos de texto insertados individuales. Estos ejemplos muestran ambos.

<TextBlock Text="Hello, world!"
           Typography.Capitals="SmallCaps"
           Typography.StylisticSet4="True"/>
TextBlock textBlock1 = new TextBlock();
textBlock1.Text = "Hello, world!";
Typography.SetCapitals(textBlock1, FontCapitals.SmallCaps);
Typography.SetStylisticSet4(textBlock1, true);
<TextBlock>12 x <Run Typography.Fraction="Slashed">1/3</Run> = 4.</TextBlock>

Obtener el código de ejemplo