2. Window

Značka <Window> slouží pro definování okna. Zpravidla touto značkou začíná Váš XAML kód (pozn.: to není pravidlo, XAML může začínat např. značkou UserControl nebo Resource – to je však mimo obsah tohoto kurzu). Ukažme si a popišme následující jednoduchý kód, který je generován Visual Studiem po založení WPF aplikace:

<Window x:Class="WpfApplication1.Window1"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    Title="Window1" Height="300" Width="300">

    <Grid>

 

    </Grid>

</Window>

Pomocí Window se de facto definuje hlavní třída, v rámci, které jsou pak definovány další kontrolky (ve skutečnosti jako instance tříd kontrolek). V XAML je definována jen část třídy, další část nalezneme v Code-Behind:

using System;

using System.Windows;

using System.Windows.Controls;

//…more using statements

 

namespace WpfApplication1

{

    /// <summary>

    /// Interaction logic for Window1.xaml

    /// </summary>

    public partial class Window1 : Window

    {

        public Window1()

        {

            InitializeComponent();

        }

    }

}

Povšimněte si slova partial u definice třídy. Toto klíčové slovo definuje, že tato třída může být (a v tomto případě i je) rozšířena o jinou definici stejné třídy – tato definice je na základě XAML automaticky generována (do souboru s příponou g.i.cs – tento soubor je v rámci projektu skrytý, ale lze zobrazit). Tento automaticky generovaný soubor obsahuje i metodu InitializeComponent, která je volána v konstruktoru standardního Code-Behind (důležité – toto volání nikdy nemažte).

Vraťme se nyní do XAML. Jako každá jiná značka Window má začátek a konec. Jsou zde některé velmi důležité vlastnosti, které se dají považovat za povinné:

  • xmlns – znamená XML namespace. Jedná se alternativu za using v kódu C#. Jaký namespace má být využit pro značky a jejich vlastnosti. Zápis se provádí trochu jinak nežli u using. Lze se samozřejmě odkázat na libovolný namespace do libovolného projektu. Je možné však využít i některé standardní namespace – typicky od Microsoftu. xmlns zapsána takto znamená odkaz na standardní třídy obsahující kontrolky a jejich vlastnosti. Naproti tomu xmls:x je odkaz na jiný namespace, pokud chceme někde v XAML kódu využít tento namespace, je třeba jej uvést prefixem x: (zde např. hned další vlastnost x:Class). Je přípustné využít i vlastní namespace, např. xmlns:usercontrols="clr-namespace:MujProjekt.UserControls" je odkaz na uživatelský namespace s vlastními kontrolkami. Kontrolku pak lze v XAML volat např. <usercontrols:FlagsComboBox …..
  • x:Class – název třídy včetně namespace. Namespace a třída jsou odděleny tečkou. POZOR – ČASTÁ CHYBA: Názvy musí korespondovat s kódem v Code-Behind. V této ukázce je WpfApplication1 název namespace a Window1 je název třídy.

Tyto dvě vlastnosti MUSÍ být definovány. Uveďme ukázku dalších zajímavých (nepovinných, ale užitečných) vlastností okna:

  • Title – text v záhlaví formuláře
  • Height – výška formuláře (pokud není u kontrolky nastavena výška, roztáhne se do celého formuláře na výšku)
  • Width – šířka formuláře (pokud není u kontrolky nastavena šířka, roztáhne se do celého formuláře na šířku)
  • ResizeMode – definuje, zda je možné měnit rozměry okna. Zde lze také zakázat maximalizaci okna
  • ShowInTaskbar – definuje, zda je okno viditelné v hlavním panelu Windows
  • WindowStartupLocation – definuje, kde bude okno umístěno na obrazovce při startu – standardně dle Windows, uprostřed obrazovky, nebo relativně k oknu, které toto okno spustilo