Différence entre Label et TextBlock


Réponses:


216

TextBlock n'est pas un contrôle

Même s'il TextBlockréside dans l'espace de noms System.Windows.Controls, ce n'est pas un contrôle. Il dérive directement de FrameworkElement. L'étiquette, en revanche, dérive de ContentControl. Cela signifie que cela Labelpeut:

  1. Recevoir un modèle de contrôle personnalisé (via la Templatepropriété).
  2. Afficher des données autres qu'une simple chaîne (via la Contentpropriété).
  3. Appliquez un DataTemplateà son contenu (via la ContentTemplatepropriété).
  4. Faites tout ce que vous ContentControlpouvez faire qui ne FrameworkElementpeut pas.

    • Label le texte est grisé lorsqu'il est désactivé
    • Label prend en charge les clés d'accès
    • Label est beaucoup plus lourd que TextBlock

La source

Quelques lectures plus intéressantes ci-dessous


1
Sur votre deuxième point: il est possible de lier un DateTime à un TextBlock.
oddRaven

26

Les étiquettes prennent généralement en charge la sortie de texte sur une seule ligne, tandis que TextBlock est destiné à l'affichage de texte sur plusieurs lignes.

Par exemple, dans wpf, TextBlock a une propriété TextWrappingqui permet une entrée multiligne; L'étiquette n'a pas cela.


4
L'étiquette a une propriété Content arbitraire. Cela peut être une chaîne, mais il peut également s'agir d'un TextBlock (ou de tout autre contrôle), de sorte que les étiquettes peuvent être multilignes en utilisant un TextBlock comme contenu.
Jim Balter

26

Labelest ContentControlce qui signifie que vous pouvez définir n'importe quoi comme contenu pour celui-ci. Absolument tout, y compris les chaînes, les nombres, les dates, les autres contrôles, les images, les formes, etc. TextBlockne peut gérer que strings.


3
«other controls» inclut un TextBlock, donc un Label peut contenir du texte encapsulé, par exemple.
Jim Balter

9

Bien que TextBlock et Label soient tous deux utilisés pour afficher du texte, ils sont assez différents sous les couvertures.

=> Label hérite de ContentControl , une classe de base qui permet l'affichage de presque toutes les interfaces utilisateur imaginables.

=> TextBlock , d'autre part, hérite directement de FrameworkElement , manquant ainsi le comportement commun à tous les éléments héritant de Control. La hiérarchie d'héritage peu profonde de TextBlock rend le contrôle plus léger que Label et mieux adapté aux scénarios plus simples et non interactifs.

PS: Cependant, si vous voulez que les touches d'accès fonctionnent ou que vous voulez une conception plus flexible ou graphique, vous devrez utiliser Label.


0

La fonctionnalité la plus ennuyeuse de TextBlockest probablement le comportement de recherche de style implicite, qui est limité au plus proche DataTemplate. Il s'agit d'un comportement par défaut pour les Controléléments non 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>

Rend le résultat de:

entrez la description de l'image ici

Vous pouvez en savoir plus ici .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.