Różnica między Label i TextBlock


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


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.


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.


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.


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 .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.