Diferença entre Label e TextBlock


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


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.


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.


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.


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 .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.