Diferença entre Label e TextBlock

132

De acordo com o Windows Applications Development with Microsoft .NET 4 70-511 Training Kit

Qual é a diferença entre Labelcontrole e TextBlockcontrole, pois ambos são controles de conteúdo e apenas exibem texto?

Rami Shareef
fonte
1
No Silverlight, o controle Label muda automaticamente após a validação (o texto fica vermelho). Mas o WPF é diferente.
precisa saber é o seguinte

Respostas:

215

TextBlock não é um controle

Embora TextBlockviva 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 Labelpode:

  1. Ser dado um modelo de controle personalizado (através da Templatepropriedade).
  2. Exiba dados que não sejam apenas uma sequência (por meio da Contentpropriedade).
  3. Aplique a DataTemplateao seu conteúdo (através da ContentTemplatepropriedade).
  4. Faça o que mais a ContentControlpode fazer e a FrameworkElementnão pode.

    • Label o texto fica acinzentado quando desativado
    • Label suporta chaves de acesso
    • Label é muito mais pesado que TextBlock

Fonte

Algumas leituras mais interessantes abaixo

biju
fonte
1
Em seu segundo ponto: é possível vincular um DateTime a um TextBlock.
27417 rara
26

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 TextWrappingque permite a entrada de várias linhas ; A etiqueta não possui isso.

rene_buehling
fonte
4
O rótulo possui uma propriedade arbitrária de conteúdo. Isso pode ser uma sequência, mas também pode ser um TextBlock (ou qualquer outro controle); portanto, os Rótulos podem ser multilinhas usando um TextBlock como conteúdo.
Jim Balter
26

Labelé o ContentControlque 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. TextBlockpode lidar apenas strings.

Urso de neve
fonte
3
"outros controles" inclui um TextBlock; portanto, um Label pode conter texto agrupado, por exemplo.
Jim Balter
9

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.

Vinodhini Ramasamy
fonte
0

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 Controlelementos 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:

insira a descrição da imagem aqui

Você pode ler mais sobre isso aqui .

Mateusz Myślak
fonte