Zgodnie z dokumentacją dotyczącą tworzenia aplikacji systemu Windows z zestawem szkoleniowym Microsoft .NET 4 70-511
Jaka jest różnica między Label
kontrolką a TextBlock
kontrolką, ponieważ obie są kontrolkami zawartości i tylko wyświetlają tekst?
Odpowiedzi:
TextBlock nie jest kontrolką
Mimo że znajduje się
TextBlock
w przestrzeni nazw System.Windows.Controls, nie jest kontrolką. Wywodzi się bezpośrednio zFrameworkElement
. Z drugiej strony Label wywodzi się zContentControl
. Oznacza to, żeLabel
może:Template
właściwości).Content
właściwości).DataTemplate
do jego zawartości (poprzezContentTemplate
właściwość).Rób wszystko, co
ContentControl
może zrobić, aFrameworkElement
nie może.Label
tekst jest wyszarzony, gdy jest wyłączonyLabel
obsługuje klucze dostępuLabel
jest znacznie cięższy niżTextBlock
Źródło
Poniżej kilka ciekawszych lektur
źródło
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ść,
TextWrapping
która umożliwia wprowadzanie wielowierszowe; Etykieta tego nie ma.źródło
Label
JestContentControl
co 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.TextBlock
Może obsługiwać tylkostrings
.źródło
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.
źródło
Prawdopodobnie najbardziej irytującą cechą
TextBlock
jest niejawne zachowanie wyszukiwania stylu, które jest ograniczone tylko do najbliższegoDataTemplate
. Jest to domyślne zachowanie dlaControl
elementó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 .
źródło