2008-09-12 91 views
97

以下两种片段都可以生成相同的用户界面。那么,为什么会有2个控制..
Snippet1WPF TextBlock元素和Label控件有什么区别?

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

Snippet2

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

好吧,我会回答这个自己......认为这是一个有益的珍闻我学到今天从Programming WPF

+3

@Rachel为什么这个问题被标记为3年后写的_(尤其是考虑到这个问题有更多的赞扬和更好的答案)_? – 2015-06-16 03:03:40

回答

108

的WPF文本块从FrameworkElement的,而不是从System.Windows.Control派生类的标签控件继承的访问键。这意味着Textblock更轻量。使用文本块的缺点是不支持Access/Accerelator键,并且没有链接到其他控件作为目标。

如果您想单独显示文本,请使用TextBlock。好处是显示文本的一种轻松,高效的方式。

当你想与像一个TextBox另一个控制文本使用的Label控件关联。好处是访问键和对目标控制的引用。

19

标签有一个重要的重点处理责任。它的目的是让您放置一个带有访问键的标题。它有一个目标属性,它指示访问密钥的目标。像这样...

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

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

+0

有没有什么办法可以获得定位到带有TextBox的TextBox的Label? – 2012-04-04 10:31:13

+0

@ArsenMkrt - 你的意思是包含另一个文本框的文本框?如果它有一个唯一的elementName,它应该工作。 – Gishu 2012-04-04 11:47:14

+0

否@Gishu,我的意思是在上面的示例中找到定位到TextBox的Label的唯一方法,以枚举可视化树? – 2012-04-04 11:53:51

-8

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

2

随着TextBlock我们可以很容易地得到多线支持我猜 - 使用TextWrapping

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

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

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

3

有关TextBlocks和标签混淆的两个最大原因是Windows窗体和常识。

  1. 当你想一巴掌文本的一个小一点在Windows窗体窗体上,您使用的标签,因此它遵循(错误地),你会做同样的事情用一个WPF标签。

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

请注意,您可以将TextBlock放入标签内。

2

标签需要各种类型的数据输入,如字符串,数字等...... TextBlock,顾名思义,只接受一个文本字符串。