This article has been localized into Hungarian by the community.
A Label vezérlő
A Label vezérlő legegyszerűbb formájában a TextBlock-hoz nagyon hasonlóan néz ki, amit más cikkben már használtunk. Bár gyorsan fel fog tűnni, hogy Text tulajdonsága helyett a Label a Content tulajdonságot használja. Ennek az az oka, hogy a Label bármelyik másik vezérlőt is magában tárolhatja, nem csak szöveget. De a tartalom lehet string is, ahogy azt az első, nagyon egyszerű példában láthatod:
<Window x:Class="WpfTutorialSamples.Basic_controls.LabelControlSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="LabelControlSample" Height="100" Width="200">
<Grid>
<Label Content="This is a Label control." />
</Grid>
</Window>
Még egy dolog, ami feltűnhet az az, hogy a Label-ben alapértelmezetten van egy kis eltartás, ami egy pár pixellel eltolja a szöveget a bal felső saroktól. A TextBlock vezérlő esetén nem ez a helyzet, ott neked kell ezt beállítani manuálisan.
Ilyen egyszerű esetben, ahol a tartalom egy mezei string, a Label igazából létrehoz magában egy TextBlock-ot és abban jeleníti meg a szöveget.
Label vezérlő vs. TextBlock vezérlő
Akkor miért használjunk Label-t egyáltalán? Nos, van egy pár fontos különbség a Label és a TextBlock között. A TextBlock csak szöveg renderelését engedélyezi, míg a Label lehetőséget nyújt:
- Szegély megadására
- Másik vezérlők renderelésére, pl. egy képre
- Sablon tartalmak használatára a ContentTemplate tulajdonsággal
- Hozzáférési kulcs használatára, hogy ráfókuszáljon a kapcsolódó vezérlőkre
Az utolsó pont tulajdonképpen az egyik fő oka a Label használatának a TextBlock helyett. Amikor egyszerű szöveget akarsz mutatni, a TextBlock vezérlőt kellene használnod, mivel ez egyszerűbb, és jobban teljesít a Label-nél a legtöbb esetben.
Label és hozzáférési kulcsok (emlékeztető)
Windowsban és más operációs rendszerekben is egy gyakori eljárás, hogy hozzáférhetsz egy vezérlőhöz az [Alt] billentyű nyomva tartásával, majd annak a karakternek a lenyomásával, ami a használni kívánt vezérlőnek felel meg. A megnyomandó karakter ki lesz jelölve, miután lenyomod az [Alt] gombot. TextBlock vezérlők nem támogatják ezt a funkciót, de a Label igen, úgyhogy a címkék vezérléséért a Label általában egy remek választás. Nézzük meg egy példában, hogyan is működik:
<Window x:Class="WpfTutorialSamples.Basic_controls.LabelControlSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="LabelControlSample" Height="180" Width="250">
<StackPanel Margin="10">
<Label Content="_Name:" Target="{Binding ElementName=txtName}" />
<TextBox Name="txtName" />
<Label Content="_Mail:" Target="{Binding ElementName=txtMail}" />
<TextBox Name="txtMail" />
</StackPanel>
</Window>
A képernyőkép úgy mutatja az ablakot, hogy az Alt már le van nyomva. Próbáld meg futtatni, nyomd le az [Alt] billentyűt, majd az N vagy M gombot. Látni fogod, hogy változik a fókusz a két TextBox között.
Szóval van itt egy pár újdonság. Először is, a hozzáférési kulcsot a karakter előtti aláhúzással (_) definiálhatjuk. Nem kell a legelső karakternek lennie, bármelyik karakter előtt lehet a Label tartalmában. A bevett szokás az az, hogy azt a legelső karaktert használjuk, amit még egyik másik vezérlő sem alkalmaz hozzáférési kulcsként.
A Target tulajdonságot használjuk, hogy összekapcsoljuk a Label-t a kívánt vezérlővel. Ehhez egy alap WPF Binding-ot használunk, a ElementName tulajdonság beírásával, de ezt majd később részletezzük. A Binding a vezérlő nevét használja fel, amit ha megváltoztatsz, a binding-ban ugyanúgy át kell írnod.
Vezérlők használata Label Content-ként
Ahogy már említettük, a Label vezérlő megengedi más vezérlők beágyazását, miközben minden előnyét megtartja. Lássunk egy példát, ahol van egy kép és szöveg is a Label-ben, miközben mindegyik szöveg el van látva hozzáférési kulccsal:
<Window x:Class="WpfTutorialSamples.Basic_controls.LabelControlAdvancedSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="LabelControlAdvancedSample" Height="180" Width="250">
<StackPanel Margin="10">
<Label Target="{Binding ElementName=txtName}">
<StackPanel Orientation="Horizontal">
<Image Source="http://cdn1.iconfinder.com/data/icons/fatcow/16/bullet_green.png" />
<AccessText Text="_Name:" />
</StackPanel>
</Label>
<TextBox Name="txtName" />
<Label Target="{Binding ElementName=txtMail}">
<StackPanel Orientation="Horizontal">
<Image Source="http://cdn1.iconfinder.com/data/icons/fatcow/16/bullet_blue.png" />
<AccessText Text="_Mail:" />
</StackPanel>
</Label>
<TextBox Name="txtMail" />
</StackPanel>
</Window>
Ez csak egy bővített változata az előző példának - egy egyszerű szöveg helyett a Label most magában foglal egy képet is egy rövid szöveg mellett (ami egy AccessText vezérlőben van, hogy így is felhasználhassunk hozzáférési kulcsot). A vezérlők egy vízszintes StackPanel-ben vannak, mivel a Label, mint bármely másik ContentControl leszármazó, csak egy alvezérlőt tartalmazhat.
Az Image vezérlő, amit később kivesézünk, külső képet használ - ez CSAK bemutatási célokra szolgál, és nem jó ötlet a legtöbb valós alkalmazás esetében.
Összegzés
A legtöbb esetben a Label vezérlő azt csinálja, amit a neve is sugall: szöveges címkeként viselkedik. Ez a legfőbb célja. Bár így is inkább TextBlock vezérlőt ajánlott használnod, vagy egy másik, WPF-ben alkalmazható szöveg-tárolót.