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.