根据使用Microsoft .NET 4 Windows应用程序开发70-511培训套件
Label
控件和TextBlock
控件之间的区别是什么,因为它们都是内容控件并且仅显示文本?
根据使用Microsoft .NET 4 Windows应用程序开发70-511培训套件
Label
控件和TextBlock
控件之间的区别是什么,因为它们都是内容控件并且仅显示文本?
Answers:
即使TextBlock
位于System.Windows.Controls命名空间中,它也不是控件。它直接来自FrameworkElement
。另一方面,标签来自ContentControl
。这意味着Label
可以:
Template
属性)。Content
属性)。DataTemplate
应用于其内容(通过ContentTemplate
属性)。做其他ContentControl
可以做的事,不能做的事FrameworkElement
。
Label
禁用时文本显示为灰色Label
支持访问键Label
比重得多 TextBlock
下面是一些更有趣的读物
标签通常支持单行文本输出,而TextBlock用于多行文本显示。
例如,在wpf中,TextBlock具有TextWrapping
启用多行输入的属性。标签没有这个。
尽管TextBlock和Label都用于显示文本,但是它们的内容却大不相同。
=> Label从ContentControl继承,ContentControl是一个基类,可显示几乎所有可以想象的UI。
=> TextBlock另一方面,直接从FrameworkElement继承,因此错过了从Control继承的所有元素共有的行为。TextBlock的浅继承层次结构使控件的权重比Label轻,并且更适合于更简单,非交互的场景。
PS:但是,如果您希望访问键可以工作,或者需要更灵活的图形设计,则需要使用Label。
可能最烦人的功能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>
产生以下结果:
您可以在此处了解更多信息。