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

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

What is the difference between the WPF TextBlock element and Label control?

本问题已经有最佳答案,请猛点这里访问。

在视觉上,以下两个片段均产生相同的UI。 那么为什么要有2个控件。
片段1

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

片段2

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

(我要自己回答这个问题……以为这是我今天从WPF编程中学到的一个有用的窍门)


WPF Textblock继承自FrameworkElement,而不是继承自System.Windows.Control,如Label Control。这意味着Textblock更轻巧。使用文本块的不利之处是不支持访问/加速键,也没有指向目标的其他控件的链接。

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

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


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

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

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


关于TextBlocks和Label的困惑的两个最大原因是Windows窗体和常识。

  • 当您想在Windows窗体中的窗体上放一些文本时,您使用了Label,因此(错误地)您将对WPF Label进行相同的操作。

  • 常识会使您相信Label是轻量级的,而TextBlock不是,轻则相反。

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


    标签接受各种数据输入,例如字符串,数字等。
    顾名思义,TextBlock仅接受文本字符串。


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

    在这种情况下使用Label要显示验证消息,需要使用标签,该标签不如TextBlock直接。

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

    因此,对我来说,这两个控件应合并为文本全功能控件。


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


    推荐阅读