Согласно учебному комплекту для разработки приложений Windows с Microsoft .NET 4 70-511
В чем разница между Label
контролем и TextBlock
управлением , так как оба управления содержимым и только для отображения текста?
Согласно учебному комплекту для разработки приложений Windows с Microsoft .NET 4 70-511
В чем разница между Label
контролем и TextBlock
управлением , так как оба управления содержимым и только для отображения текста?
Ответы:
Хотя TextBlock
он находится в пространстве имен System.Windows.Controls, он не является элементом управления. Это происходит непосредственно из FrameworkElement
. Ярлык, с другой стороны, происходит от ContentControl
. Это означает, что Label
можно:
Template
свойство).Content
свойство).DataTemplate
к его содержимому (через ContentTemplate
свойство).Делайте все, что ContentControl
может, что FrameworkElement
не может.
Label
текст неактивен при отключенииLabel
поддерживает ключи доступаLabel
намного тяжелее чем TextBlock
Еще несколько интересных статей ниже
Ярлыки обычно поддерживают вывод однострочного текста, в то время как TextBlock предназначен для отображения многострочного текста.
Например, в wpf TextBlock имеет свойство, TextWrapping
разрешающее многострочный ввод; На этикетке этого нет.
Label
это ContentControl
означает, что вы можете установить для него все что угодно. Абсолютно все, включая строки, числа, даты, другие элементы управления, изображения, формы и т. Д., TextBlock
Может обрабатываться только strings
.
Хотя TextBlock и Label используются для отображения текста, внутренне они сильно различаются.
=> Label наследуется от ContentControl , базового класса, который позволяет отображать практически любой пользовательский интерфейс, который только можно вообразить.
=> 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>
Дает результат:
Вы можете прочитать больше об этом здесь .