Согласно учебному комплекту для разработки приложений 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>
Дает результат:
Вы можете прочитать больше об этом здесь .