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