Perbedaan antara Label dan TextBlock


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


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.


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.


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.


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 .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.