【问题标题】:What is the difference between the WPF TextBlock element and Label control? [duplicate]WPF TextBlock 元素和Label 控件有什么区别? [复制]
【发布时间】:2008-09-12 14:17:11
【问题描述】:

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

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

片段2

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

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

【问题讨论】:

  • @Rachel 为什么这个问题被标记为与 3 年后写的一个重复的问题(特别是考虑到这个问题有更多的支持和更好的答案)

标签: wpf


【解决方案1】:

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

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

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

【讨论】:

  • @Kugel:我在链接页面中没有看到对Label 的引用,所以我看不出这是TextBlockLabel 慢的理由。你能详细说明一下吗?如果Label 使用TextBlock 进行渲染,正如joshsmithonwpf.wordpress.com/2007/07/04/… 建议的那样,是什么让TextBlock 变慢?
【解决方案2】:

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

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

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

【讨论】:

  • 有什么办法可以得到针对具有TextBox的TextBox的Label?
  • @ArsenMkrt - 你的意思是一个包含另一个文本框的文本框吗?如果它有一个唯一的 elementName,它应该可以工作。
  • 没有@Gishu,我的意思是在上面的示例中找到针对 TextBox 的标签的唯一方法是枚举可视化树?
  • @ArsenMkrt - 不确定,但看起来不太可能。您可以从绑定目标转到源(标签到文本框).. 但不能反过来。为什么需要这个?
  • 我想在我的表单中记录用户活动,并希望为每个 UI 元素设置一些唯一标识符,正在考虑在没有名称的情况下从标签内容中生成标识符,但我猜不是一个好主意,就像我在这里描述的那样stackoverflow.com/questions/9996145/…
【解决方案3】:

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

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

  2. 常识会导致您认为 Label 是轻量级的,而 TextBlock 不是,而事实恰恰相反。

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

【讨论】:

    【解决方案4】:

    有了TextBlock,我猜我们可以很容易地获得多线支持——使用TextWrapping

    在这种情况下使用Label,例如显示验证信息,需要使用&lt;AccessKey&gt;标签,不如TextBlock那么直接。

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

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

    【讨论】:

    • 除了 TextBlock 不是一个控件,因此有一个很大的理由反对组合它们。
    【解决方案5】:

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

    【讨论】:

      【解决方案6】:

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

      【讨论】:

      • 这是不正确的。 TextBlock 是两者中更简单(轻量级)的。它派生自 FrameworkElement.. 请参阅评分最高的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-07
      • 1970-01-01
      • 2014-06-11
      • 2013-04-01
      • 2015-03-13
      相关资源
      最近更新 更多