Unterschied zwischen Label und TextBlock


Antworten:


214

TextBlock ist kein Steuerelement

Obwohl es sich TextBlockim System.Windows.Controls-Namespace befindet, handelt es sich nicht um ein Steuerelement. Es leitet sich direkt von ab FrameworkElement. Label hingegen leitet sich von ab ContentControl. Dies bedeutet, dass Label:

  1. Erhalten Sie eine benutzerdefinierte Steuerungsvorlage (über die TemplateEigenschaft).
  2. Zeigen Sie andere Daten als nur eine Zeichenfolge an (über die ContentEigenschaft).
  3. Wenden Sie a DataTemplateauf seinen Inhalt an (über die ContentTemplateEigenschaft).
  4. Tun Sie, was auch immer Sie ContentControlkönnen, FrameworkElementwas Sie nicht können.

    • Label Text ist ausgegraut, wenn deaktiviert
    • Label unterstützt Zugriffsschlüssel
    • Label ist viel schwerer als TextBlock

Quelle

Einige weitere interessante Lektüren weiter unten


1
Zu Ihrem zweiten Punkt: Es ist möglich, eine DateTime an einen TextBlock zu binden.
oddRaven

26

Beschriftungen unterstützen normalerweise die einzeilige Textausgabe, während der TextBlock für die mehrzeilige Textanzeige vorgesehen ist.

Zum Beispiel hat TextBlock in wpf eine Eigenschaft, TextWrappingdie eine mehrzeilige Eingabe ermöglicht. Label hat dies nicht.


4
Label hat eine beliebige Content-Eigenschaft. Das kann eine Zeichenfolge sein, aber es kann auch ein TextBlock (oder ein anderes Steuerelement) sein, sodass Beschriftungen mehrzeilig sein können, indem ein TextBlock als Inhalt verwendet wird.
Jim Balter

26

Labelist , ContentControlwas bedeutet , dass Sie etwas als Inhalt für sie einstellen können. Absolut alles, einschließlich Zeichenfolgen, Zahlen, Datumsangaben, andere Steuerelemente, Bilder, Formen usw., TextBlockkann nur verarbeitet werden strings.


3
"Andere Steuerelemente" enthalten einen TextBlock, sodass ein Label beispielsweise umbrochenen Text enthalten kann.
Jim Balter

9

Obwohl TextBlock und Label beide zum Anzeigen von Text verwendet werden, unterscheiden sie sich unter den Deckblättern erheblich.

=> Label erbt von ContentControl , einer Basisklasse, die die Anzeige nahezu aller vorstellbaren Benutzeroberflächen ermöglicht.

=> TextBlock hingegen erbt direkt von FrameworkElement und verpasst so das Verhalten, das allen von Control geerbten Elementen gemeinsam ist. Durch die flache Vererbungshierarchie von TextBlock ist das Steuerelement leichter als Label und besser für einfachere, nicht interaktive Szenarien geeignet.

PS: Wenn Sie jedoch möchten, dass Zugriffstasten funktionieren oder ein flexibleres oder grafischeres Design wünschen, müssen Sie Label verwenden.


0

Das wahrscheinlich nervigste Merkmal TextBlockist das implizite Verhalten bei der Suche nach Stilen, das nur auf den nächsten Bereich beschränkt ist DataTemplate. Dies ist ein Standardverhalten für Nicht- ControlXAML-Elemente.

<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>

Ergibt ein Ergebnis von:

Geben Sie hier die Bildbeschreibung ein

Sie können mehr darüber lesen Sie hier .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.