This article has been localized into Czech by the community.
Ovládací prvek Label
Ovládací prvek "Label" (mohli bychom přeložit jako štítek, či popisek) ve své nejjednodušší podobě nápadně připomíná ovládací prvek "TextBlock" používaný v jiném článku. Avšak při bližším pohledu si můžete povšimnout, že místo vlastnosti "Text" používá ovládací prvek "Label" vlastnost "Content" (česky obsah). To proto, že "Label" nemusí obsahovat pouze text, ale může být naplněn i jakýmkoli dalším obsahem v podobě jiného ovládacího prvku. Ovšemže jím může být i textový řetězec, jak je vidět v následujícím, velmi jednoduchém příkladu:
<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>
Další věc, které jste si mohli povšimnout je skutečnost, že ovládací prvek "Label" má ve výchozím nastavení již drobné odsazení (vnitřní okraj - "padding"), které způsobí, že je text odsazen několik pixelů od horního levého rohu. Ovládací prvek "TextBlock" takovou vlastnost nemá a hodnotu vnitřního odsazení ("padding") je u něj zapotřebí definovat explicitně.
V jednoduchém příkladě, jakým je tento, kdy obsahem je textový řetězec, ovládací prvek "Label" ve skutečnosti vytvoří "TextBlock" a Váš text zobrazí v něm.
Ovládací prvek "Label" vs. "TextBlock"
Proč tedy vůbec ovládací prvek "Label" používat? Pochopitelně je zde několik podstatných rozdílů mezi ovládacími prvky "Label" a "TextBlock". Zatímco "TextBlock" umožňuje zobrazit pouze textový řetězec, prvek "Label" Vám umožní také:
- Vymezit okraj
- Renderovat (vykreslit) jiné ovládací prvky, např. obrázek
- Pomocí vlastnosti "ContentTemplate" použít šablonový obsah
- Použít klávesovou zkratku pro výběr příslušného ovládacího prvku
Poslední z odrážek je vlastně jeden z hlavních důvodů proč použít prvek "Label" místo prvku "TextBlock". Ovšem jestliže je potřeba zobrazit (tzv. "renderovat") pouhý text, je vhodnější použít prvek "TextBlock", protože je to snazší a ve většině případů i efektivnější.
"Label" a klávesové zkratky ("Access keys")
V operačním systému Windows (stejně jako i v mnohých dalších) je běžné moci vybrat příslušný ovládací prvek dialogového okna podržením klávesy [Alt] a následným stiskem písmene, které odpovídá příslušnému ovládacímu prvku, který chceme vybrat. Písmena, která stiskem umožní výběr daného prvku jsou zvýrazněna po stisku klávesy [Alt]. Ovládací prvek "TextBlock" takový nástroj nevlastní, proto pro popisky, jež plní roli ovládacího prvku, je vždy skvělou volbou použití prvku "Label". Podívejme se na příklad, jak to vypadá v praxi:
<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>
Na obrázku je zobrazen vzhled našeho vzorového dialogu po stisku klávesy [Alt]. Vyzkoušejte si po jeho spuštění stisknout klávesu [Alt] a poté stisknout písmeno "N" a "M". Uvidíte, jak se zaměření (zvýraznění) přesune mezi dvěma textovými poli (rámečky).
Je zde tedy několik nových koncepcí. Předně definujeme klávesovou zkratku ("access key") předřazením podtržítka (_) před kýžené písmeno. Nemusí to být první písmeno, může se jednat o jakékoli písmeno, jež je v popisku obsaženo. Běžnou praxí však je volba prvního písmene vždy, když není již použito jako součást klávesové zkratky pro jiný ovládací prvek.
K propojení popisku "Label" s jemu příslušným ovládacím prvkem je použita vlastnost Target obsahující standardní způsob, jakým se ve WPF provádí svázání ("binding") při použití názvu prvku ElementName. Vše bude podrobně vysvětleno v pokročilejších kapitolách tohoto tutoriálu. Svázání ("binding") je provedeno na základě názvu ovládacího prvku, proto, jestliže název změníte, je třeba nezapomenout také změnit definici svázání ("binding").
"Label" obsahující ovládací prvky
Jak již bylo zmíněno, ovládací prvek "Label" umožňuje pojmout další ovládací prvky a zároveň si uchovat další přednosti. Vyzkoušejme si příklad, v němž popisky (ovládací prvky "Label") obsahují jak obrázek, tak i krátký text a zároveň je pro každý z nich definována klávesová zkratka (access key).
<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>
Toto je pouze rozšíření předchozího příkladu - místo prostého textu nyní popisek "Label" obsahuje obrázek i krátký text (uvnitř ovládacího prvku "AccessText", což umožňuje ponechat popisku definovanou klávesovou zkratku "access key"). Protože "Label" stejně jako jiné deriváty "ContentControl" může obsahovat pouze jednoho přímého potomka, jsou oba ovládací prvky vloženy do vodorovně orientovaného prvku "StackPanel".
Prvek "Image" popsaný v tomto tutoriálu obsahuje externí obrázek - to slouží POUZE k demonstrativním účelům a NENÍ vhodné tímto způsobem vkládat obrázky do reálných aplikací.
Shrnutí
Ve většině případů má ovládací prvek "Label" (česky popisek) přesně takový význam, jaký lze vyvodit z jeho názvu: slouží jako textový popisek jiného ovládacího prvku. Toto je jeho hlavní způsob užití. Ve většině jiných případů byste měli spíše použít ovládací prvek "TextBlock" nebo jiný z textových kontejnerů, které WPF nabízí.