XAML.cz Magazín moderních technologií založených na XAML

Styly a jejich použití

Napsáno pro WPF od Jarda Jirava  [14.01.2010]

Určitě si také vybavíte situace, kdy jste nastavovali stejné vlastnosti pro sadu prvků, když jste vytvářeli winform aplikace.

Totéž můžete udělat ve WPF a nebo také nemusíte a můžete použít styly. WPF poskytuje styly, které představují pohodlný způsob, kombinovat a ukládat nastavení vlastností pro typ prvku a ten pojmenovat a to centralizovaným způsobem. Jednou definovaný styl je pak možné jednoduše použít na několika místech a to pouhým přiřazením jedné vlastnosti nebo nastavením jednoho atributu za využití Markup Extension.

Styly tedy představují způsob, jak vytvořit seznam vlastností pro typ prvku/objektu, jako příklad může posloužit nastavení atributů fontu pro všechny elementy TextBox.

Jak definovat styly

Styly jsou definovány v elementu Resources. Každý element ve stromu prvků může mít svoji Resources sekci, ale je obvyklé využívat jen některé z možností a to pokud možno na co nejvyšší úrovni. Můžeme tak definovat styly na úrovni Grid elementu a všechny prvky uvnitř tohoto elementu pak budou moci využívat tyto vytvořené a deklarované styly, prvky mimo tento Grid se k těmto stylům nedostanou.

Další běžná umístění jsou na úrovni Application (nebo též označovaná jako globální), Window/Page případně UserControl. Samozřejmě nesmím zapomenout na ResourceDictionary, která představuje elegantní způsob, jak spravovat styly odděleně od ostatní deklarace vzhledu. Taková ResourceDictionary pak musí být připojena na potřebné místo pomocí MergeDictionaries.

Vzhledem k tomu, že jsou styly ukládány do Dictionary, musí mít každý styl přiřazen jednoznačný klíč a to buď pomocí atributu x:Key a nebo se dá využít implicitního přiřazení na základě typu. Každá sekce zdroje stylů má pak svůj vlastní naming scope.

Použitím atributu TargetType pak omezíme styl pouze na určitý typ prvku např. tak můžeme omezit platnost pouze pro typ TextBox.

Jestliže deklarujeme tento zápis na úrovni elementu <Window.Resources>

<Style x:Key="ErrorFont" TargetType="TextBox">
  <Setter Property="FontSize" Value="16" />
  <Setter Property="FontWeight" Value="Bold" />
  <Setter Property="Foreground" Value="Red" />
</Style>
můžeme poté použít tento styl na kterýkoliv TextBox v tomto okně.
<StackPanel>
  <TextBox Text="Tento textbox je bez stylu" />
  <TextBox Text="Použit styl ErrorFont" Style="{StaticResource ErrorFont}" />
</StackPanel>

Jak vidíte, styl je přiřazen velice jednoduše použitím StaticResourceExtension a odkázáním se na jednoznačný název stylu.

Příště si povíme něco o tom, jak můžeme využít flexibilní layout a začneme vytvářet první WPF aplikaci.

Komentáře

ukládám komentář, vyčkejte prosím..
  1. Buďte první, kdo napíše komentář.

@xamlcz

  • RT @jvanrhyn: XAML, It's a bit like olives. Takes a while to get used to. But once you're used to it. It is actually pretty good. <3 XAML
  • RT @moser_christian: WPF Inspector 0.9.7 is released. It supports .NET 3.5 and 4.0 The project is now open source and available on CodeP ...
  • Jeff Handley oznámil vydání WCF RIA Services v.1.0 SP1 RTM http://bit.ly/gOgckn ke stažení na http://bit.ly/gVAXdK
  • jedna výzva pro Brno. Byl někdo z vás na přednášce o RIA v MS Akvárku? Dejte o sobě vědět. Děkuji
  • také jste uvažovali o tom, že zkusíte na projekt použít Caliburn Micro nebo naopak Prism 4? A co tak obojí, šlo by to nebo ne? Již brzy