根据Windows Applications Development with Microsoft .NET 4 70-511培训套件
Label
控件和TextBlock
控件之间有什么区别,因为它们都是内容控件而只是显示文本?
答案 0 :(得分:190)
即使TextBlock
存在于System.Windows.Controls命名空间中,它也不是控件。它直接来自FrameworkElement
。另一方面,标签来自ContentControl
。这意味着Label
可以:
Template
属性)。Content
属性)。DataTemplate
应用于其内容(通过ContentTemplate
属性)。执行ContentControl
可以执行FrameworkElement
无法执行的操作。
Label
文字在禁用时显示为灰色Label
支持访问密钥Label
比TextBlock
下面有一些更有趣的读物
答案 1 :(得分:24)
Label
是ContentControl
,这意味着您可以将任何内容设置为内容。绝对包括字符串,数字,日期,其他控件,图像,形状等等。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>
得出以下结果:
您可以详细了解here。