Label和TextBlock之间的区别


Answers:


214

TextBlock不是控件

即使TextBlock位于System.Windows.Controls命名空间中,它也不是控件。它直接来自FrameworkElement。另一方面,标签来自ContentControl。这意味着Label可以:

  1. 被赋予自定义控件模板(通过Template属性)。
  2. 显示除字符串以外的其他数据(通过Content属性)。
  3. 将一个DataTemplate应用于其内容(通过ContentTemplate属性)。
  4. 做其他ContentControl可以做的事,不能做的事FrameworkElement

    • Label 禁用时文本显示为灰色
    • Label 支持访问键
    • Label 比重得多 TextBlock

资源

下面是一些更有趣的读物


1
第二点:可以将DateTime绑定到TextBlock。
奇雷文'17

26

标签通常支持单行文本输出,而TextBlock用于多行文本显示。

例如,在wpf中,TextBlock具有TextWrapping启用多行输入的属性。标签没有这个。


4
标签具有任意的Content属性。那可以是一个字符串,但也可以是一个TextBlock(或任何其他控件),因此通过使用TextBlock作为内容,标签可以是多行的。
吉姆·巴尔特

26

LabelContentControl,这意味着你可以设置任何东西作为它的内容。绝对包括字符串,数字,日期,其他控件,图像,形状等在内的任何内容都TextBlock只能处理strings


3
“其他控件”包括一个TextBlock,因此Label可以包含例如换行的文本。
吉姆·巴尔特

9

尽管TextBlock和Label都用于显示文本,但是它们的内容却大不相同。

=> LabelContentControl继承,ContentControl是一个基类,可显示几乎所有可以想象的UI。

=> TextBlock另一方面,直接从FrameworkElement继承,因此错过了从Control继承的所有元素共有的行为。TextBlock的浅继承层次结构使控件的权重比Label轻,并且更适合于更简单,非交互的场景。

PS:但是,如果您希望访问键可以工作,或者需要更灵活的图形设计,则需要使用Label。


0

可能最烦人的功能TextBlock是隐式样式查找行为,其范围仅限于最接近的DataTemplate。对于非Controlxaml元素,这是默认行为。

<StackPanel Orientation="Vertical">
    <StackPanel.Resources>
        <Style TargetType="TextBlock">
            <Setter Property="Foreground" Value="Red"/>
        </Style>

        <Style TargetType="Label">
            <Setter Property="Foreground" Value="Red"/>
        </Style>
    </StackPanel.Resources>

    <ContentControl Content="Test">
        <ContentControl.ContentTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding}"/>
            </DataTemplate>
        </ContentControl.ContentTemplate>
    </ContentControl>

    <ContentControl Content="Test">
        <ContentControl.ContentTemplate>
            <DataTemplate>
                <Label Content="{Binding}"/>
            </DataTemplate>
        </ContentControl.ContentTemplate>
    </ContentControl>
</StackPanel>

产生以下结果:

在此处输入图片说明

您可以在此处了解更多信息。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.