Teorie: Popis základních kontrolek na WPF formuláři
(Dílčí příklady jsou převzaty z https://wpf-tutorial.com/ )
Jakým způsobem se pracuje s jednotlivými kontrolkami bylo vysvětleno u prvního příkladu v rámci cvičení. Doporučujeme se nejprve podívat na tento příklad.
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