WPF TextBlock元素和Label控件有什么区别?

以下两个片段都可以生成相同的用户界面。 那么为什么有2个控件?
Snippet1

<TextBlock>Name:</TextBlock> <TextBox Name="nameTextBox" /> 

Snippet2

 <Label>Name:</Label> <TextBox Name="nameTextBox" /> 

嗯,我会自己回答…认为这是我今天从WPF编程中学到的有用的东西

WPF文本块inheritance自FrameworkElement,而不是像标签控件一样从System.Windows.Control派生。 这意味着Textblock更加轻便。 使用文本块的缺点是不支持Access / Accerelator Keys,并且没有其他控件作为目标的链接。

当你想自己显示文本使用TextBlock 。 好处是显示文本的一个轻的,高性能的方式。

当您想要将文本与另一个控件(如TextBox)相关联时,请使用Label控件 。 访问键和对目标控制的引用的好处。

标签有一个重要的焦点处理责任。它的目的是让您放置一个带有访问键的标题。 它有一个目标属性,它表示访问键的目标。 喜欢这个…

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

在没有Target属性的情况下,Label控件没有任何用处。 如果您按下表示“无法处理请求”的访问键,您将听到一声蜂鸣声

TextBlocks和Labels混淆的两个最大的原因是Windows Forms和常识。

  1. 当你想在Windows窗体的表单上打一小段文字时,你使用了一个Label,所以它遵循(不正确),你会用WPF Label做同样的事情。

  2. 常识会导致你相信一个标签是轻量级的,而一个TextBlock不是,当相反是真的。

请注意,您可以将一个TextBlock放入一个Label中。

有了TextBlock我们可以很容易地使用TextWrapping支持多行支持。

在这种情况下使用Label ,例如显示validation消息,需要使用比TextBlock更简单的<AccessKey>标签。

另一方面,使用TextBlock不允许我们设置BorderBrush属性。

所以,对我来说,这两个控件应该组合成一个文本全function控件。

标签需要各种数据input,如string,数字等… TextBlock,顾名思义,只接受一个文本string。

对于需要最小文本支持的情况(如控件的标签),Label可以用作TextBlock的替代方法。 使用Label可以是有利的,因为它需要更less的资源(更轻的重量),然后TextBlock。