Zgodnie z dokumentacją dotyczącą tworzenia aplikacji systemu Windows z zestawem szkoleniowym Microsoft .NET 4 70-511
Jaka jest różnica między Labelkontrolką a TextBlockkontrolką, ponieważ obie są kontrolkami zawartości i tylko wyświetlają tekst?
Zgodnie z dokumentacją dotyczącą tworzenia aplikacji systemu Windows z zestawem szkoleniowym Microsoft .NET 4 70-511
Jaka jest różnica między Labelkontrolką a TextBlockkontrolką, ponieważ obie są kontrolkami zawartości i tylko wyświetlają tekst?
Odpowiedzi:
Mimo że znajduje się TextBlockw przestrzeni nazw System.Windows.Controls, nie jest kontrolką. Wywodzi się bezpośrednio z FrameworkElement. Z drugiej strony Label wywodzi się z ContentControl. Oznacza to, że Labelmoże:
Templatewłaściwości).Contentwłaściwości).DataTemplatedo jego zawartości (poprzez ContentTemplatewłaściwość).Rób wszystko, co ContentControlmoże zrobić, a FrameworkElementnie może.
Label tekst jest wyszarzony, gdy jest wyłączonyLabel obsługuje klucze dostępuLabel jest znacznie cięższy niż TextBlockPoniżej kilka ciekawszych lektur
Etykiety zwykle obsługują pojedyncze wiersze tekstu, podczas gdy TextBlock jest przeznaczony do wyświetlania tekstu wielowierszowego.
Na przykład w wpf TextBlock ma właściwość, TextWrappingktóra umożliwia wprowadzanie wielowierszowe; Etykieta tego nie ma.
LabelJest ContentControlco oznacza, że można ustawić wszystko jako treści dla niego. Absolutnie wszystko, w tym ciągi, liczby, daty, inne kontrolki, obrazy, kształty itp. TextBlockMoże obsługiwać tylko strings.
Chociaż TextBlock i Label są używane do wyświetlania tekstu, są zupełnie inne pod okładkami.
=> Label dziedziczy po ContentControl , klasie bazowej, która umożliwia wyświetlanie prawie każdego interfejsu użytkownika, jaki można sobie wyobrazić.
=> Z drugiej strony TextBlock dziedziczy bezpośrednio z FrameworkElement , przez co brakuje zachowania, które jest wspólne dla wszystkich elementów dziedziczących po Control. Płytka hierarchia dziedziczenia TextBlock sprawia, że formant jest lżejszy niż Label i lepiej nadaje się do prostszych, nieinteraktywnych scenariuszy.
PS: Jeśli jednak chcesz, aby klucze dostępu działały lub chcesz mieć bardziej elastyczny lub graficzny projekt, musisz użyć Label.
Prawdopodobnie najbardziej irytującą cechą TextBlockjest niejawne zachowanie wyszukiwania stylu, które jest ograniczone tylko do najbliższego DataTemplate. Jest to domyślne zachowanie dla Controlelementów innych niż 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>
Daje wynik:
Więcej na ten temat przeczytasz tutaj .