Відповідно до розробки програм для 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 обидва використовуються для відображення тексту, вони є досить різними під обкладинками.
=> Мітка успадковується від 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>
Виходить результат:
Більше про це можна прочитати тут .