WPF: TextBlock vs. Label

Na pierwszy rzut oka, TextBlock oraz Label są bardzo podobne. Obydwie kontrolki(?)  wyświetlają tekst. Różnice są jednak spore i postaram się je wyjaśnić. Sprawdźmy co następujący kod wyświetli:

<StackPanel>
   <Label>Label</Label>
   <TextBlock>TextBlock</TextBlock>
</StackPanel>

image

Kontrolka Label jest lekko przesunięta w prawo. Jest to spowodowane faktem, że Padding dla Label domyślnie ma wartość 5. W przypadku TextBlock jest to 0, dlatego też na powyższym screenie TextBlock przylega do krawędzi.

Ustawmy IsEnabled StackPanel’a na false i sprawdźmy jak zachowają się kontrolki:

<StackPanel IsEnabled="False">
   <Label>Label</Label>
   <TextBlock>TextBlock</TextBlock>
</StackPanel>

image

Label zachował się jak zwykła kontrolka, kolor został ustawiony na szary. W przypadku TextBlock nic nie zostało zmienione.

Kolejną zaletą Label jest wsparcie dla tzw. Access Keys. Dzięki nim użytkownik naciskając Alt oraz specjalnie oznaczoną literę z  Label Content, może przejść do sąsiadującego TextBox np.

<StackPanel>
   <Label Target="{Binding ElementName=textBox}">La_bel</Label>
   <TextBox x:Name="textBox"></TextBox>

   <TextBox></TextBox>
   <TextBox></TextBox>
</StackPanel>

Jeśli użytkownik naciśnie Alt + b, focus zostanie ustawiony na TextBox (textBox). Literę należy poprzedzić znakiem _.

Teraz przyszedł czas na wady Label. Jeśli zajrzymy na MSDN to dowiemy się, że TextBlock nie jest tak naprawdę kontrolką ponieważ dziedziczy z FrameworkElement. Label z kolei dziedziczy z ContentControl (dlatego zawiera właściwość Content). Z tego powodu Label jest znacznie cięższą kontrolką i bardziej obciążającą zasoby systemu. Stosujmy zatem Label w przypadku formularzy jako etykieta pól edycyjnych. Jeśli chcemy wyświetlić większy fragment tekstu, wtedy lepszym rozwiązaniem jest TextBlock. Warto również zwrócić uwagę na to, że TextBlock jest wykorzystywany jako składowa różnych kontrolek np. Button. Przeładowując więc globalnie style dla Textblock, zmienimy również wygląd m.in. button’ów.

2 thoughts on “WPF: TextBlock vs. Label”

  1. Na dobrą sprawę, najważniejsza różnica miedzy Label a TextBox to, to że Label jest kontrolką a TextBox elementem graficznym. Z perspektywy stosowania, to właśnie Label stosuję na formularzach itp. a TextBox jako element tekstowy w Template dla kontrolki.

    Dla mnie TextBox jest “prymitywnym” elementem interfejsu, a Label “właściwym”.

Leave a Reply

Your email address will not be published.