De acordo com o Windows Applications Development with Microsoft .NET 4 70-511 Training Kit
Qual é a diferença entre Label
controle e TextBlock
controle, pois ambos são controles de conteúdo e apenas exibem texto?
De acordo com o Windows Applications Development with Microsoft .NET 4 70-511 Training Kit
Qual é a diferença entre Label
controle e TextBlock
controle, pois ambos são controles de conteúdo e apenas exibem texto?
Respostas:
Embora TextBlock
viva no espaço para nome System.Windows.Controls, não é um controle. Deriva diretamente de FrameworkElement
. A etiqueta, por outro lado, deriva de ContentControl
. Isso significa que Label
pode:
Template
propriedade).Content
propriedade).DataTemplate
ao seu conteúdo (através da ContentTemplate
propriedade).Faça o que mais a ContentControl
pode fazer e a FrameworkElement
não pode.
Label
o texto fica acinzentado quando desativadoLabel
suporta chaves de acessoLabel
é muito mais pesado que TextBlock
Algumas leituras mais interessantes abaixo
As etiquetas geralmente suportam saída de texto em linha única, enquanto o TextBlock é destinado à exibição de texto em várias linhas.
Por exemplo, no wpf, o TextBlock possui uma propriedade TextWrapping
que permite a entrada de várias linhas ; A etiqueta não possui isso.
Label
é o ContentControl
que significa que você pode definir qualquer coisa como conteúdo para ele. Absolutamente qualquer coisa, incluindo strings, números, datas, outros controles, imagens, formas, etc. TextBlock
pode lidar apenas strings
.
Embora TextBlock e Label sejam usados para exibir texto, eles são bem diferentes nas capas.
=> O rótulo herda do ContentControl , uma classe base que permite a exibição de praticamente qualquer interface do usuário imaginável.
=> TextBlock , por outro lado, herda diretamente do FrameworkElement , perdendo assim o comportamento comum a todos os elementos herdados do Control. A hierarquia superficial de herança do TextBlock torna o controle mais leve que o Label e mais adequado para cenários mais simples e não interativos.
PS: No entanto, se você deseja que as teclas de acesso funcionem ou deseja um design gráfico ou mais flexível, precisará usar o Label.
Provavelmente, o recurso mais irritante TextBlock
é o comportamento implícito de pesquisa de estilo, cujo escopo é apenas o mais próximo possível DataTemplate
. Este é um comportamento padrão para Control
elementos não 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>
Rende um resultado de:
Você pode ler mais sobre isso aqui .