Diferencia entre Label y TextBlock

Respuestas:

215

TextBlock no es un control

Aunque TextBlockvive en el espacio de nombres System.Windows.Controls, no es un control. Se deriva directamente de FrameworkElement. Etiqueta, por otro lado, deriva de ContentControl. Esto significa que Labelpuede:

  1. Recibir una plantilla de control personalizada (a través de Template propiedad).
  2. Mostrar datos que no sean solo una cadena (a través de Content propiedad).
  3. Aplicar a DataTemplatea su contenido (a través de la ContentTemplatepropiedad).
  4. Haz cualquier otra cosa que ContentControlpueda hacer que FrameworkElementno puedas.

    • Label el texto aparece en gris cuando está deshabilitado
    • Label admite teclas de acceso
    • Label es mucho más pesado que TextBlock

Fuente

Algunas lecturas más interesantes a continuación

biju
fuente
1
En su segundo punto: es posible vincular un DateTime a un TextBlock.
oddRaven
26

Las etiquetas generalmente admiten la salida de texto de una sola línea, mientras que TextBlock está destinado a la visualización de texto de varias líneas.

Por ejemplo, en wpf TextBlock tiene una propiedad TextWrappingque permite la entrada multilínea; La etiqueta no tiene esto.

rene_buehling
fuente
44
La etiqueta tiene una propiedad de Contenido arbitraria. Puede ser una cadena, pero también puede ser un TextBlock (o cualquier otro control), por lo que las Etiquetas pueden ser multilínea utilizando un TextBlock como contenido.
Jim Balter
26

Labeles lo ContentControlque significa que puedes configurar cualquier cosa como contenido para ello. Absolutamente cualquier cosa, incluyendo cadenas, números, fechas, otros controles, imágenes, formas, etc., TextBlocksolo pueden manejarse strings.

Snowbear
fuente
3
"otros controles" incluye un TextBlock, por lo que una etiqueta puede contener texto envuelto, por ejemplo.
Jim Balter
9

Aunque TextBlock y Label se usan para mostrar texto, son bastante diferentes debajo de las cubiertas.

=> Label hereda de ContentControl , una clase base que permite la visualización de casi cualquier IU imaginable.

=> TextBlock , por otro lado, hereda directamente de FrameworkElement , perdiendo así el comportamiento que es común a todos los elementos que heredan de Control. La jerarquía de herencia superficial de TextBlock hace que el control sea más liviano que Label y sea más adecuado para escenarios más simples y no interactivos.

PD: Sin embargo, si desea que las teclas de acceso funcionen o desea un diseño más flexible o gráfico, deberá usar Label.

Vinodhini Ramasamy
fuente
0

Probablemente, la característica más molesta TextBlockes el comportamiento de búsqueda de estilo implícito, que se enfoca solo al más cercano DataTemplate. Este es un comportamiento predeterminado para Controlelementos que no son xaml.

<StackPanel Orientation="Vertical">
    <StackPanel.Resources>
        <Style TargetType="TextBlock">
            <Setter Property="Foreground" Value="Red"/>
        </Style>

        <Style TargetType="Label">
            <Setter Property="Foreground" Value="Red"/>
        </Style>
    </StackPanel.Resources>

    <ContentControl Content="Test">
        <ContentControl.ContentTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding}"/>
            </DataTemplate>
        </ContentControl.ContentTemplate>
    </ContentControl>

    <ContentControl Content="Test">
        <ContentControl.ContentTemplate>
            <DataTemplate>
                <Label Content="{Binding}"/>
            </DataTemplate>
        </ContentControl.ContentTemplate>
    </ContentControl>
</StackPanel>

Produce un resultado de:

ingrese la descripción de la imagen aquí

Puedes leer más sobre esto aquí .

Mateusz Myślak
fuente