De acuerdo con el desarrollo de aplicaciones de Windows con Microsoft .NET 4 70-511 Training Kit
¿Cuál es la diferencia entre el Label
control y el TextBlock
control ya que ambos son controles de contenido y solo muestran texto?
De acuerdo con el desarrollo de aplicaciones de Windows con Microsoft .NET 4 70-511 Training Kit
¿Cuál es la diferencia entre el Label
control y el TextBlock
control ya que ambos son controles de contenido y solo muestran texto?
Respuestas:
Aunque TextBlock
vive 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 Label
puede:
Template
propiedad).Content
propiedad).DataTemplate
a su contenido (a través de la ContentTemplate
propiedad).Haz cualquier otra cosa que ContentControl
pueda hacer que FrameworkElement
no puedas.
Label
el texto aparece en gris cuando está deshabilitadoLabel
admite teclas de accesoLabel
es mucho más pesado que TextBlock
Algunas lecturas más interesantes a continuación
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 TextWrapping
que permite la entrada multilínea; La etiqueta no tiene esto.
Label
es lo ContentControl
que significa que puedes configurar cualquier cosa como contenido para ello. Absolutamente cualquier cosa, incluyendo cadenas, números, fechas, otros controles, imágenes, formas, etc., TextBlock
solo pueden manejarse strings
.
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.
Probablemente, la característica más molesta TextBlock
es el comportamiento de búsqueda de estilo implícito, que se enfoca solo al más cercano DataTemplate
. Este es un comportamiento predeterminado para Control
elementos 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:
Puedes leer más sobre esto aquí .