Unterschied zwischen Label und TextBlock

132

Gemäß der Windows-Anwendungsentwicklung mit Microsoft .NET 4 70-511 Training Kit

Was ist der Unterschied zwischen dem LabelSteuerelement und dem TextBlockSteuerelement, da beide Inhaltssteuerelemente sind und nur Text anzeigen?

Rami Shareef
quelle
1
In Silverlight ändert sich das Label-Steuerelement nach der Validierung selbst (der Text wird rot). Aber WPF ist anders.
Vortexwolf

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

Biju
quelle
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.

rene_buehling
quelle
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.

Schneebär
quelle
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.

Vinodhini Ramasamy
quelle
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 .

Mateusz Myślak
quelle