102

从视觉上看,以下两个片段都产生了相同的 UI。那么为什么有 2 个控件..
Snippet1

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

片段2

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

好吧,我自己来回答这个问题......认为这是我今天从Programming WPF学到的有用的花絮)

4

6 回答 6

112

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

当您想单独显示文本时,请使用 TextBlock。好处是显示文本的一种轻便、高效的方式。

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

于 2008-09-12T17:58:17.653 回答
20

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

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

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

于 2008-09-12T14:21:03.293 回答
3

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

  1. 当您想在 Windows 窗体中的表单上添加少量文本时,您使用了标签,因此(错误地)您将使用 WPF 标签执行相同的操作。

  2. 常识会让您相信 Label 是轻量级的,而 TextBlock 不是,而事实恰恰相反。

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

于 2013-03-06T05:36:16.703 回答
2

TextBlock我猜我们可以很容易地获得多线支持 -使用TextWrapping.

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

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

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

于 2010-10-30T12:37:45.143 回答
2

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

于 2014-09-13T20:34:22.153 回答
-9

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

于 2009-07-09T12:13:58.340 回答