Разница между Label и TextBlock


133

Согласно учебному комплекту для разработки приложений Windows с Microsoft .NET 4 70-511

В чем разница между Labelконтролем и TextBlockуправлением , так как оба управления содержимым и только для отображения текста?


1
В Silverlight элемент управления Label изменяется сам после проверки (текст становится красным). Но WPF - другое дело.
vortexwolf

Ответы:


216

TextBlock не является элементом управления

Хотя TextBlockон находится в пространстве имен System.Windows.Controls, он не является элементом управления. Это происходит непосредственно из FrameworkElement. Ярлык, с другой стороны, происходит от ContentControl. Это означает, что Labelможно:

  1. Получить настраиваемый шаблон элемента управления (через Templateсвойство).
  2. Отображать данные, отличные от строки (через Contentсвойство).
  3. Примените DataTemplateк его содержимому (через ContentTemplateсвойство).
  4. Делайте все, что ContentControlможет, что FrameworkElementне может.

    • Label текст неактивен при отключении
    • Label поддерживает ключи доступа
    • Label намного тяжелее чем TextBlock

Источник

Еще несколько интересных статей ниже


1
По вашему второму пункту: можно привязать DateTime к TextBlock.
oddRaven

26

Ярлыки обычно поддерживают вывод однострочного текста, в то время как TextBlock предназначен для отображения многострочного текста.

Например, в wpf TextBlock имеет свойство, TextWrappingразрешающее многострочный ввод; На этикетке этого нет.


4
Ярлык имеет произвольное свойство Content. Это может быть строка, но также может быть TextBlock (или любой другой элемент управления), поэтому метки могут быть многострочными, используя TextBlock в качестве содержимого.
Джим Балтер

26

Labelэто ContentControlозначает, что вы можете установить для него все что угодно. Абсолютно все, включая строки, числа, даты, другие элементы управления, изображения, формы и т. Д., TextBlockМожет обрабатываться только strings.


3
"другие элементы управления" включают TextBlock, поэтому Label может содержать, например, обернутый текст.
Джим Балтер

9

Хотя TextBlock и Label используются для отображения текста, внутренне они сильно различаются.

=> Label наследуется от ContentControl , базового класса, который позволяет отображать практически любой пользовательский интерфейс, который только можно вообразить.

=> TextBlock , с другой стороны, наследуется непосредственно от FrameworkElement , таким образом упуская поведение, которое является общим для всех элементов, унаследованных от Control. Неглубокая иерархия наследования TextBlock делает элемент управления легче, чем Label, и лучше подходит для более простых, неинтерактивных сценариев.

PS: Однако, если вы хотите, чтобы ключи доступа работали или хотите более гибкий или графический дизайн, вам нужно использовать Label.


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>

Дает результат:

введите описание изображения здесь

Вы можете прочитать больше об этом здесь .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.