Difference between Label and TextBlock
Asked Answered
N

5

169

According to the Windows Applications Development with Microsoft .NET 4 70-511 Training Kit

What is the difference between the Label control and TextBlock control since both are content controls and just displaying text?

Noland answered 21/3, 2011 at 19:59 Comment(1)
In Silverlight the Label control changes itself after validation (the text becames red). But WPF is different.Thorwald
M
271

TextBlock is not a control

Even though TextBlock lives in the System.Windows.Controls namespace, it is not a control. It derives directly from FrameworkElement. Label, on the other hand, derives from ContentControl. This means that Label can:

  1. Be given a custom control template (via the Template property).
  2. Display data other than just a string (via the Content property).
  3. Apply a DataTemplate to its content (via the ContentTemplate property).
  4. Do whatever else a ContentControl can do that a FrameworkElement cannot.

    • Label text is grayed out when disabled
    • Label supports access keys
    • Label is much heavier than TextBlock

Source

Some more interesting reads below

Milena answered 22/3, 2011 at 4:38 Comment(2)
On your second point: it is possible to bind a DateTime to a TextBlock.Albertinealbertite
I take it TextBlock is more performant, correct me if I'm wrong.Accelerator
I
33

Labels usually support single line text output while the TextBlock is intended for multiline text display.

For example in wpf TextBlock has a property TextWrapping which enables multiline input; Label does not have this.

Indicator answered 21/3, 2011 at 20:3 Comment(1)
Label has an arbitrary Content property. That can be a string, but it can also be a TextBlock (or any other control), so Labels can be multiline by using a TextBlock as the content.Johppa
R
31

Label is ContentControl which means that you can set anything as a content for it. Absolutely anything including strings, numbers, dates, other controls, images, shapes, etc. TextBlock can handle only strings.

Rimrock answered 21/3, 2011 at 20:8 Comment(1)
"other controls" includes a TextBlock, so a Label can contain wrapped text, for instance.Johppa
L
13

Although TextBlock and Label are both used to display text, they are quite different under the covers.

=> Label inherits from ContentControl, a base class that enables the display of almost any UI imaginable.

=> TextBlock, on the other hand, inherits directly from FrameworkElement, thus missing out on the behavior that is common to all elements inheriting from Control. The shallow inheritance hierarchy of TextBlock makes the control lighter weight than Label and better suited for simpler, noninteractive scenarios.

PS: However, if you want access keys to work or want a more flexible or graphical design, you’ll need to use Label.

Lemaceon answered 4/12, 2015 at 8:25 Comment(0)
F
3

Probably the most annoying feature of TextBlock is the implicit style lookup behavior, which is scoped to only to the closest DataTemplate. This is a default behavior for non Control xaml elements.

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

Yields a result of:

enter image description here

You can read more about it here.

Farlee answered 29/4, 2020 at 7:19 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.