Label和TextBlock之间的区别

时间:2011-03-21 19:59:11

标签: wpf label textblock

根据Windows Applications Development with Microsoft .NET 4 70-511培训套件

Label控件和TextBlock控件之间有什么区别,因为它们都是内容控件而只是显示文本?

5 个答案:

答案 0 :(得分:190)

TextBlock不是控件

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

  1. 获得自定义控件模板(通过Template属性)。
  2. 显示除字符串以外的数据(通过Content属性)。
  3. DataTemplate应用于其内容(通过ContentTemplate属性)。
  4. 执行ContentControl可以执行FrameworkElement无法执行的操作。

    • Label文字在禁用时显示为灰色
    • Label支持访问密钥
    • LabelTextBlock
    • 重得多
  5. Source

    下面有一些更有趣的读物

答案 1 :(得分:24)

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

答案 2 :(得分:21)

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

例如在wpf中TextBlock有一个属性TextWrapping,可以启用多行输入;标签没有这个。

答案 3 :(得分:6)

尽管TextBlock和Label都用于显示文本,但它们在封面上却完全不同。

=> 标签继承自 ContentControl ,这是一个基类 可以显示几乎任何可以想象的UI。

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

PS:但是,如果您想要访问密钥工作或想要更灵活的图形设计,则需要使用Label。

答案 4 :(得分:0)

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

<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>

得出以下结果:

enter image description here

您可以详细了解here