Perbedaan antara Label dan TextBlock

132

Menurut Pengembangan Aplikasi Windows dengan Microsoft .NET 4 70-511 Training Kit

Apa perbedaan antara Labelkontrol dan TextBlockkontrol karena keduanya adalah kontrol konten dan hanya menampilkan teks?

Rami Shareef
sumber
1
Di Silverlight kontrol Label berubah dengan sendirinya setelah validasi (teks menjadi merah). Tetapi WPF berbeda.
vortexwolf

Jawaban:

215

TextBlock bukan kontrol

Meskipun TextBlocktinggal di namespace System.Windows.Controls, itu bukan kontrol. Ini berasal langsung dari FrameworkElement. Label, di sisi lain, berasal dari ContentControl. Ini berarti bahwa Labeldapat:

  1. Diberi template kontrol khusus (melalui Templateproperti).
  2. Tampilkan data selain hanya string (melalui Contentproperti).
  3. Terapkan DataTemplateke kontennya (melalui ContentTemplateproperti).
  4. Lakukan apa pun yang ContentControlbisa dilakukan yang FrameworkElementtidak bisa.

    • Label teks berwarna abu-abu saat dinonaktifkan
    • Label mendukung kunci akses
    • Label jauh lebih berat daripada TextBlock

Sumber

Beberapa bacaan lebih menarik di bawah ini

biju
sumber
1
Pada poin kedua Anda: Anda dapat mengikat DateTime ke TextBlock.
oddRaven
26

Label biasanya mendukung output teks baris tunggal sementara TextBlock dimaksudkan untuk tampilan teks multiline.

Misalnya di wpf TextBlock memiliki properti TextWrappingyang memungkinkan input multiline; Label tidak memiliki ini.

rene_buehling
sumber
4
Label memiliki properti Konten yang berubah-ubah. Itu bisa berupa string, tetapi juga bisa berupa TextBlock (atau kontrol lainnya), sehingga Label bisa multiline dengan menggunakan TextBlock sebagai konten.
Jim Balter
26

Labeladalah ContentControlyang berarti bahwa Anda dapat mengatur apa pun sebagai konten untuk itu. Apa pun yang termasuk string, angka, tanggal, kontrol lain, gambar, bentuk, dll. Hanya TextBlockdapat ditangani strings.

Snowbear
sumber
3
"kontrol lain" termasuk TextBlock, jadi Label dapat berisi teks yang dibungkus, misalnya.
Jim Balter
9

Meskipun TextBlock dan Label keduanya digunakan untuk menampilkan teks, mereka sangat berbeda di bawah sampulnya.

=> Label mewarisi dari ContentControl , kelas dasar yang memungkinkan tampilan hampir semua UI yang bisa dibayangkan.

=> TextBlock , di sisi lain, mewarisi langsung dari FrameworkElement , sehingga kehilangan perilaku yang umum untuk semua elemen yang mewarisi dari Control. Hirarki pewarisan yang dangkal dari TextBlock membuat kontrol lebih ringan daripada Label dan lebih cocok untuk skenario yang lebih sederhana dan tidak interaktif.

NB: Namun, jika Anda ingin kunci akses berfungsi atau ingin desain yang lebih fleksibel atau grafis, Anda harus menggunakan Label.

Vinodhini Ramasamy
sumber
0

Mungkin fitur yang paling menjengkelkan TextBlockadalah perilaku pencarian gaya implisit, yang dibatasi hanya untuk yang terdekat DataTemplate. Ini adalah perilaku default untuk Controlelemen 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>

Menghasilkan hasil dari:

masukkan deskripsi gambar di sini

Anda dapat membaca lebih lanjut di sini .

Mateusz Myślak
sumber