Différence entre Label et TextBlock

133

Selon le développement d'applications Windows avec le kit de formation Microsoft .NET 4 70-511

Quelle est la différence entre le Labelcontrôle et le TextBlockcontrôle puisque les deux sont des contrôles de contenu et affichent simplement du texte?

Rami Shareef
la source
1
Dans Silverlight, le contrôle Label change lui-même après validation (le texte devient rouge). Mais WPF est différent.
vortexwolf

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

biju
la source
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.

rene_buehling
la source
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.

Ours des neiges
la source
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.

Vinodhini Ramasamy
la source
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 .

Mateusz Myślak
la source