Różnica między Label i TextBlock

135

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?

Rami Shareef
źródło
1
W Silverlight kontrolka Label zmienia się po walidacji (tekst staje się czerwony). Ale WPF jest inny.
vortexwolf

Odpowiedzi:

219

TextBlock nie jest kontrolką

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:

  1. Otrzymaj niestandardowy szablon kontrolny (za pośrednictwem Templatewłaściwości).
  2. Wyświetl dane inne niż tylko ciąg (za pośrednictwem Contentwłaściwości).
  3. Zastosuj a DataTemplatedo jego zawartości (poprzez ContentTemplatewłaściwość).
  4. Rób wszystko, co ContentControlmoże zrobić, a FrameworkElementnie może.

    • Label tekst jest wyszarzony, gdy jest wyłączony
    • Label obsługuje klucze dostępu
    • Label jest znacznie cięższy niż TextBlock

Źródło

Poniżej kilka ciekawszych lektur

biju
źródło
1
Druga kwestia: możliwe jest powiązanie DateTime z TextBlock.
oddRaven
27

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.

rene_buehling
źródło
4
Etykieta ma dowolną właściwość Content. Może to być ciąg, ale może to być również TextBlock (lub dowolna inna kontrolka), więc etykiety mogą być wielowierszowe, używając TextBlock jako zawartości.
Jim Balter
26

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.

Snowbear
źródło
3
„Inne kontrolki” obejmują TextBlock, więc etykieta może na przykład zawierać zawinięty tekst.
Jim Balter
9

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.

Vinodhini Ramasamy
źródło
0

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:

wprowadź opis obrazu tutaj

Więcej na ten temat przeczytasz tutaj .

Mateusz Myślak
źródło