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

WPF Aplikace – použití stylů a panelů

Napsáno pro WPF od Jarda Jirava  [20.01.2010]

V předchozích článcích jsem popsal jak využít stylů a panelů pro deklaraci uživatelského rozhraní. Tento článek pak bude prakticky zaměřený, ukáži vám, jak vytvořit jednoduchý vzhled aplikace. Tato aplikace bude mít za úkol zobrazovat a filtrovat seznam vín ve vinotéce, v tomto článku si předvedeme, jak aplikaci vytvořit, nastylovat a určit její vzhled.

Deklarace stylů

Jak již víme, styly je vhodné deklarovat na co nejvyšší úrovni, ať už je to Application, Window/Page nebo samostatná ResourceDictionary.

Pro dnešní aplikaci využiji deklaraci stylů na úrovni Application. Struktura aplikace vypadá následovně.

WPF Aplikace - Solution

Projekt, typu WPF Application, obsahuje soubor App.xaml a přidružený App.xaml.cs a soubory Window1.xaml s Window1.xaml.cs. V současné chvíli je soubor App.xaml.cs ve výchozím stavu, stejně tak jako soubor Window1.xaml.cs.

Pro deklaraci stylu si otevřeme soubor App.xaml a vložíme následující řádky kódu:

<Application.Resources>
    <Style x:Key='Rounded' TargetType='Border'>
      <Setter Property='Background' Value='#66FFFFFF' />
      <Setter Property='CornerRadius' Value='10' />
      <Setter Property='BorderThickness' Value='2' />
      <Setter Property='BorderBrush' Value='DarkGray' />
 
    </Style>
    <Style x:Key='Faded' TargetType='TextBlock'>
      <Setter Property='Foreground' Value='White' />
      <Setter Property='FontWeight' Value='700' />
     
    </Style>
    <Style x:Key='Common' TargetType='TextBox'>
      <Setter Property='Foreground' Value='SteelBlue' />
      <Setter Property="FontSize" Value="12" />
      <Setter Property='Margin' Value='10,2,10,5' />
    </Style>
    
    <Style x:Key="MainGrid" TargetType="Grid">
      <Setter Property="Background" Value="#4d040b" />
    </Style>
    <Style x:Key="Header" TargetType="Grid">
      <Setter Property="Margin" Value="7" />
    </Style>

    <!--End Styles for Styling Demo -->
  </Application.Resources>

V souboru je tak deklarováno celkem pět stylů, které jsou pojmenovány a zároveň je nastaven TargetType, který určuje, pro které prvky bude daný styl možno použít. V následujícím textu a obrázcích se pak podívám na to, co jednotlivé hodnoty představují.

Deklarace layoutu

V současné chvíli mám definovány styly a tak mohu deklarovat rozvržení jednotlivých prvků v okně. Výsledný vzhled aplikace bude po spuštění vypadat jako na následujícím obrázku.

WPF Application

Pokud si tedy rozebereme vzhled a rozvržení jednotlivých prvků, uživatelské rozhraní je rozděleno na dvě části, první řádek, ve kterém je nápis aplikace, textové pole pro možnost zadání textu k vyhledání a tlačítko, kterým se vyhledání spustí. Ve druhém řádku je v současné chvíli jen textové pole, které v některém z příštích článků nahradíme seznamem s daty.

Přejděme tedy na deklaraci vzhledu aplikace

<Window x:Class="CohoWpfApplication.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1"
        Height="700"
        Width="700"
        WindowStartupLocation='CenterScreen'>
  <Grid Style='{StaticResource MainGrid}'>
    <Grid.RowDefinitions>
      <RowDefinition Height='50' />
      <RowDefinition Height='*' />

    </Grid.RowDefinitions>
    <Grid Style="{StaticResource Header}">
      <Grid.ColumnDefinitions>
        <ColumnDefinition Width='*' />
        <ColumnDefinition Width='200' />
        <ColumnDefinition Width='50' />

      </Grid.ColumnDefinitions>

      <Border Grid.Column='0'
              Style='{StaticResource Rounded}'>
        <TextBlock Text='Wine Search'
                   Margin='10,3,0,0'
                   Style='{StaticResource Faded}' />
      </Border>

      <TextBox Grid.Column='1'
               Style='{StaticResource Common}'
               Text='Type search text here...' />

      <Button Grid.Column='2'
              Content='Search' />
    </Grid>

    <TextBlock Grid.Row="1"
               Margin="10"
               Foreground='White'>
      Todo: Wines Displayed Here....
    </TextBlock>

  </Grid>

</Window>

a rovnou si můžeme jednotlivé části popsat.

Popis deklarace vzhledu

V elementu <Window /> máme vedle definování potřebných namespace, které jsou potřebné pro informování XAML parseru také přiřazení vlastností pro Width, Height, Title a WindowStartupLocation. Zároveń je také provedeno přiřazení partial třídy, která je spojena s tímto oknem.

Následuje element <Grid />, kde je provedeno přižazení stylu s názvem MainGrid, který je deklarován na úrovni aplikace. Tento styl nastaví barvu pozadí celé mřížky na vínovou.

Dále je provedena deklarace dvou řádků mřížky a to pomocí elementů <Grid.RowDefinitions /> a vnořeného <RowDefinition />. První řádek má mít výšku 50, u druhého řádku je pak použita tzv. hvězdičková notace, kdy tento řádek vyplní dostupný prostor.

Na dalším řádku je pak opět <Grid />, který rozdělí první řádek na tři sloupce a to v poměru šířek

  • první sloupec vyplní dostupný prostor
  • druhý sloupec zabere šířku 200
  • třetí sloupec pak zabere šířku 50

Uvnitř jednotlivých sloupců se pak nacházejí prvky prvního řádku. Postupně je tak deklarován <Border /> se stylem Rounded, který tomuto rámečku dodá kulaté rohy pomocí vlastnosti CornerRadius, lehkou průhlednost, která způsobí zesvětlení podkladu a šedivý okraj. Uvnitř tohoto rámečku je pak vložen <TextBlock />, který obsahuje uvedený text a opět je mu nastaven styl Faded.

Poté již následuje vložený <TextBox />, kterému je pomocí Attached property Grid.Column nastaveno umístění ve druhém sloupci mřížky. Obdobně jako v předchozích případech je pak nastaven styl Common.

Ve třetím sloupci prvního řádku je element <Button />, který bude mít výchozí vzhled, tak jak je definován v .NET Frameworku a má pouze nastavenu vlastnost Content.

Posledním prvkem je pak <TextBlock />, který v tomto případě slouží pouze jako jistý placeholder, na toto místo v dalších článcích umístím seznam s daty. Opět můžete vidět rozdílný přístup k zápisu vlastnosti Text, která v tomto případě není deklarována pomocí atributu, ale je použita tzv. expandovaná forma, kdy je text vložen do elementu.

Závěrem

Jak je vidět z předchozích dvou ukázek deklarace stylu a layoutu, vytvoření uživatelského rozhraní pomocí jazyka XAML může být přehledné a můžeme poměrně snadno takové uživatelské rozhraní upravovat a nebo měnit.

V dalších článcích si tuto aplikaci ještě rozšíříme, napojíme ji na data, která nabindujeme na jednotlivé prvky a ukáži, jak využít DataTemplate a UserControl.

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