Etiket ve TextBlock arasındaki fark


Yanıtlar:


216

TextBlock bir kontrol değildir

TextBlockSystem.Windows.Controls ad alanında yaşıyor olsa da , bu bir kontrol değildir. Doğrudan kaynaklanıyor FrameworkElement. Etiket ise bundan türemiştir ContentControl. Bu, Labelşunları yapabileceği anlamına gelir :

  1. Özel bir kontrol şablonu verilecektir ( Templateözellik aracılığıyla ).
  2. Bir dizeden başka verileri görüntüleyin ( Contentözellik aracılığıyla ).
  3. Bir uygula DataTemplate(aracılığıyla içeriğine ContentTemplateözelliği).
  4. A'nın ContentControlyapamayacağı başka ne varsa FrameworkElementyapamazsın.

    • Label devre dışı bırakıldığında metin grileşiyor
    • Label erişim anahtarlarını destekler
    • Label -den çok daha ağır TextBlock

Kaynak

Aşağıda biraz daha ilginç okumalar


1
İkinci noktanızda: DateTime'ı bir TextBlock'a bağlamak mümkündür.
oddRaven

26

Etiketler genellikle tek satırlı metin çıktısını desteklerken, TextBlock çok satırlı metin görüntüleme için tasarlanmıştır.

Örneğin, wpf'de TextBlock, TextWrappingçok satırlı girişi etkinleştiren bir özelliğe sahiptir; Etiket buna sahip değil.


4
Etiketin keyfi bir İçerik özelliği vardır. Bu bir dize olabilir, ancak aynı zamanda bir TextBlock (veya başka bir kontrol) olabilir, bu nedenle Etiketler içerik olarak bir TextBlock kullanılarak çok satırlı olabilir.
Jim Balter

26

Labelbu, ContentControlherhangi bir şeyi içerik olarak ayarlayabileceğiniz anlamına gelir. Dizeler, sayılar, tarihler, diğer kontroller, resimler, şekiller vb . Dahil olmak üzere kesinlikle her şey TextBlockyalnızca işleyebilir strings.


3
"diğer kontroller" bir TextBlock içerir, bu nedenle bir Etiket, örneğin sarılmış metin içerebilir.
Jim Balter

9

TextBlock ve Label her ikisi de metni görüntülemek için kullanılsa da, kapakların altında oldukça farklıdırlar.

=> Etiket , akla gelebilecek hemen her kullanıcı arayüzünün görüntülenmesini sağlayan temel bir sınıf olan ContentControl'den miras alır .

=> Öte yandan TextBlock , doğrudan FrameworkElement'ten miras alır , dolayısıyla Control'den miras alan tüm öğeler için ortak olan davranışı kaçırır. TextBlock'un yüzeysel miras hiyerarşisi, denetimin Label'dan daha hafif olmasını ve daha basit, etkileşimsiz senaryolar için daha uygun olmasını sağlar.

Not: Bununla birlikte, çalışmak için erişim anahtarları istiyorsanız veya daha esnek veya grafiksel bir tasarım istiyorsanız, Etiket kullanmanız gerekir.


0

Muhtemelen en sinir bozucu özelliği TextBlock, kapsamı yalnızca en yakın olana ayarlanan örtük stil arama davranışıdır DataTemplate. Bu, Controlxaml olmayan öğeler için varsayılan bir davranıştır .

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

Şunların bir sonucunu verir:

görüntü açıklamasını buraya girin

Bu konuda daha fazla bilgi bulabilirsiniz burada .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.