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

时间:2008-09-12 14:17:11

标签: wpf

视觉上,以下两个代码段都会生成相同的UI。那么为什么有2个控件..
Snippet1

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

Snippet2

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

嗯,我自己会回答这个问题......认为这是我今天从Programming WPF 学到的一个有用的消息。)

6 个答案:

答案 0 :(得分:110)

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

如果您想单独显示文字,请使用TextBlock 。这样做的好处是可以轻松,高效地显示文本。

如果要将文本与TextBox等其他控件关联,请使用Label控件 。好处是访问键和目标控件的引用。

答案 1 :(得分:20)

标签具有重要的焦点处理责任。其目的是允许您使用访问密钥放置标题。它具有目标属性,表示访问密钥的目标。像这样......

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

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

答案 2 :(得分:3)

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

  1. 当您想在Windows窗体中对表单上的一小段文本进行打击时,您使用了一个Label,因此它(错误地)跟随您使用WPF标签执行相同的操作。

  2. 常识会让你相信标签是轻量级的而TextBlock不是,当相反的情况属实时。

  3. 请注意,您可以将TextBlock放在Label中。

答案 3 :(得分:2)

使用TextBlock我可以轻松获得多行支持 - 使用TextWrapping

在这种情况下使用Label,例如显示验证邮件时,需要使用<AccessKey>标记,这不像TextBlock那样直截了当。

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

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

答案 4 :(得分:2)

Label采用各种数据输入,如String,Number等...... 顾名思义,TextBlock只接受文本字符串。

答案 5 :(得分:-9)

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