Visually both of the following snippets produce the same UI. So why are there 2 controls..

<TextBox Name="nameTextBox" />


<TextBox Name="nameTextBox" />

(Well I am gonna answer this myself... thought this is a useful tidbit I learnt today from Programming WPF)

+3  A: 

Label has an important focus handling responsibility.Its purpose is to allow you to place a caption with an access key. It has a Target property, which indicates the target of the access key. Like this...

<Label Target="{Binding ElementName=nameTextBox}">_Name:</Label>
<TextBox x:Name="nameTextBox" />

In the absence of the Target property, the Label control does nothing useful. You'll just hear a beep if you press the access key indicating 'unable to process request'

+16  A: 

The WPF Textblock inherits from FrameworkElement instead of deriving from System.Windows.Control like the Label Control. This means that the Textblock is much more lightweight. The downside of using a textblock is no support for Access/Accerelator Keys and there is no link to other controls as target.

When you want to display text by itself use the TextBlock. The benefit is a light, performant way to display text.

When you want to associate text with another control like a TextBox use the Label control. The benefits are access keys and references to target control.

Alan Le
-1 TextBlock is not lighter. Given large text Textblock becomes a considerably slower than equivalent Label. See http://stackoverflow.com/questions/2465181/is-this-slow-wpf-textblock-performance-expected/2473049#2473049
+7  A: 

Another great answer: Josh Smith on WPF

Christopher Scott

Label can be used as an alternative to TextBlock for situations where minimal text support is required such as the label for a control. Using Label can be advantageous because it requires even less resources (lighter weight) then a TextBlock.

This is incorrect. TextBlock is the simpler (lightweight) among the two. It derives from FrameworkElement.. See top-rated answer.

With TextBlock we can easily have multi-line support I guess - using TextWrapping.

Using Label in such cases, e.g. displaying validation message, need to use <AccessKey> tags, which is less straight-forward than TextBlock.

On the other hand, using TextBlock not allow us to set the BorderBrush property.

So, to me, the two controls should be combined into a text-full-feature control.

Nam Gi VU