Differenza tra Label e TextBlock


Risposte:


216

TextBlock non è un controllo

Anche se TextBlockvive nello spazio dei nomi System.Windows.Controls, non è un controllo. Deriva direttamente da FrameworkElement. L'etichetta, d'altra parte, deriva da ContentControl. Ciò significa che Labelpuò:

  1. Ricevi un modello di controllo personalizzato (tramite la Templateproprietà).
  2. Visualizza dati diversi da una semplice stringa (tramite la Contentproprietà).
  3. Applica a DataTemplateal suo contenuto (tramite la ContentTemplateproprietà).
  4. Fai qualunque altra ContentControlcosa che puoi fare che FrameworkElementnon puoi.

    • Label il testo è disattivato quando disabilitato
    • Label supporta le chiavi di accesso
    • Label è molto più pesante di TextBlock

fonte

Di seguito alcune letture più interessanti


1
Sul tuo secondo punto: è possibile associare un DateTime a un TextBlock.
oddRaven,

26

Le etichette in genere supportano l'output di testo a riga singola mentre TextBlock è progettato per la visualizzazione di testo su più righe.

Ad esempio in wpf TextBlock ha una proprietà TextWrappingche abilita l'input multilinea; L'etichetta non ha questo.


4
L'etichetta ha una proprietà di contenuto arbitraria. Può essere una stringa, ma può anche essere un TextBlock (o qualsiasi altro controllo), quindi le etichette possono essere multilinea utilizzando un TextBlock come contenuto.
Jim Balter,

26

Labelè il ContentControlche significa che puoi impostare qualsiasi cosa come contenuto per esso. Assolutamente tutto ciò che include stringhe, numeri, date, altri controlli, immagini, forme, ecc. TextBlockPuò essere gestito solo strings.


3
"altri controlli" include un TextBlock, quindi un'etichetta può contenere testo racchiuso, ad esempio.
Jim Balter,

9

Sebbene sia TextBlock sia Label siano usati per visualizzare il testo, sono abbastanza diversi sotto le copertine.

=> L' etichetta eredita da ContentControl , una classe di base che consente la visualizzazione di quasi tutte le UI immaginabili.

=> TextBlock , d'altra parte, eredita direttamente da FrameworkElement , perdendo così il comportamento comune a tutti gli elementi che ereditano da Control. La gerarchia di ereditarietà superficiale di TextBlock rende il controllo più leggero rispetto a Label e adatto a scenari più semplici e non interattivi.

PS: Tuttavia, se vuoi che le chiavi di accesso funzionino o desideri un design più flessibile o grafico, dovrai utilizzare Label.


0

Probabilmente la caratteristica più fastidiosa TextBlockè il comportamento di ricerca dello stile implicito, che è mirato solo al più vicino DataTemplate. Questo è un comportamento predefinito per Controlelementi non 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>

Produce un risultato di:

inserisci qui la descrizione dell'immagine

Puoi leggere di più qui .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.