Різниця між міткою та текстовим блоком


132

Відповідно до розробки програм для Windows з Microsoft .NET 4 70-511 навчальний комплект

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


1
У Silverlight елемент керування міткою змінюється після перевірки (текст стає червоним). Але WPF відрізняється.
vortexwolf

Відповіді:


215

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
Мітка має довільну властивість вмісту. Це може бути рядок, але він також може бути TextBlock (або будь-яким іншим елементом управління), тому мітки можуть бути багаторядковими, використовуючи TextBlock як вміст.
Джим Балтер

26

Labelце ContentControlозначає, що ви можете встановити що-небудь як вміст для цього. Абсолютно все, включаючи рядки, цифри, дати, інші елементи керування, зображення, фігури тощо, TextBlockможе обробляти лише strings.


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

9

Хоча TextBlock і 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.