Lekce 41 - WPF - Prvky pro menu a dialogy
V minulé lekci, WPF - Prvky pro zobrazení dat, jsme si prošli formulářové prvky WPF pro zobrazování dat.
V dnešním WPF tutoriálu se podíváme na menu a dialogy.
Prvky pro vytváření menu
Jedny z dalších prvků WPF jsou prvky, pomocí nichž lze vytvářet menu. Jsou to tyto.
- Menu
- MenuItem
Menu
Prvek Menu
, společně s MenuItem
, slouží k
vytvoření rozbalovací nabídky, tzv. aplikačního menu pod záhlavím okna.
Může se ve formuláři vyskytovat pouze jednou a vytváří se podobně jako u
TreeView
vnořováním prvků MenuItem
do sebe.

Struktura elementů v XAML má na začátku element <Menu>
a samozřejmě končí jeho uzavřením </Menu>
. Mezi tím se
definují jednotlivé volby pomocí prvku <MenuItem>
. Ty pak
v sobě mají odkaz na přiřazenou metodu. V hlavičce každé
MenuItem
je text, ve kterém lze pomocí podtržítka definovat
tzv. "horkou klávesu", což je klávesová zkratka. Jednotlivé volby pak lze
volat pomocí stisku kláves Alt a této "horké klávesy"
(příslušný znak na klávesnici). Součástí hlavičky může být např.
obrázek, zaškrtávátko apod. (viz projekt UkazkaMenu
).
Vlastnosti
Items
- položky (strukturovaný záznam)ItemsSource
- zdroj dat (kolekce strukturovaných záznamů)Header
- hlavička příslušné volby (text, odkaz na metodu,Image
, ...)
Události
Click
- při kliknutí na volbu se spustí přiřazená metoda
Příklad
XAML
<Menu BorderBrush="Black" Background="Transparent" FontFamily="Tahoma" Foreground="WhiteSmoke" FontSize="14"> <MenuItem Header="_Soubor"> <MenuItem Header="_Nový soubor..." Click="NovySoubor" Foreground="Black"> <MenuItem.Icon> <Image Source="Obr/novy.png" Height="16" Width="16" /> </MenuItem.Icon> </MenuItem> . . . </Menu>
C#
Událost Click
:
private void NovySoubor(object sender, RoutedEventArgs e) { MessageBox.Show("Byla vybrána volba Nový soubor"); }
Dialogy
Součástí předdefinovaných prvků jsou i následující dialogy:
- MessageBox
- OpenFileDialog
- SaveFileDialog
MessageBox
Tento dialog může zastávat funkci oznámení nebo může sloužit jako rozhodovací prvek k řízení aplikace, kdy se v dialogovém okně můžeme dotázat, zda se má např. smazat vybraný záznam a podle volby Ano nebo Ne spustit příslušné procedury.

Vlastnosti
Žádné důležité.
Metody
Show()
- Zobrazí dialog. Tato metoda vrací hodnotu vybrané volby (typMessageBoxResult
). Na základě vrácené hodnoty se pak mohou spouštět příslušné metody. MetodaShow()
má následující parametry:messageBoxText
- nějaké oznámení nebo dotaz. Tento text je povinný.caption
- titulek okna
Do dalších přetížení metody Show()
můžeme dále
specifikovat jako parametry:
MessageBoxButton
- volba tlačítekOK
OKCancel
YesNo
YesNoCancel
MessageBoxImage
- zobrazená ikonaAsterisk
Error
Exclamation
Hand
Information
None
Question
Stop
Warning
MessageBoxResult
- návratový kódCancel
No
None
OK
Yes
MessageBoxOptions
- nastavuje vzhled okna. Zajímavé jsou tyto hodnoty:RightAlign
- text v okně je zarovnán vpravoRtlReading
- prohodí pozice prvků v okně. Tzn., že titulek je umístěn vpravo, ikona zavření okna vlevo, zadaný text je vlevo, vybraná ikona vpravo a tlačítka mají prohozené pořadí.
Příklad
Dialogy otevíráme pouze z C# kódu.
C#
private void Zobraz(object sender, RoutedEventArgs e) { MessageBoxResult status = MessageBox.Show("Nějaký text.", "Titulek", MessageBoxButton.YesNoCancel, MessageBoxImage.Information, MessageBoxResult.Cancel); switch (status) { case MessageBoxResult.None: // nějaký kód break; case MessageBoxResult.OK: // nějaký kód break; case MessageBoxResult.Cancel: // nějaký kód break; case MessageBoxResult.Yes: // nějaký kód break; case MessageBoxResult.No: // nějaký kód break; default: break; } }
OpenFileDialog
Tento dialog je stejný jako Průzkumník ve Windows a slouží k výběru požadovaného souboru.
Vlastnosti
Nejdůležitějšími vlastnostmi jsou:
FileName
– jméno vybraného souboruFilter
– slouží k filtrování zobrazených souborů. Filtr se skládá z popisné části a příslušné přípony, oddělené svislítkem|
(viz Příklad)InitialDirectory
– nastavuje počáteční adresář, který má dialog otevřít
Příklad
C#
V následujícím příkladu je ukázka načtení souboru do prvku
RichTextBox
. Prvek je pojmenován rtbxSoubor
:
private void DialogOpen(object sender, RoutedEventArgs e) { OpenFileDialog soubor = new OpenFileDialog(); soubor.Filter = "Textové soubory (*.txt;*rtf)|*.txt;*rtf"; if (soubor.ShowDialog() == true) { rtbxSoubor.Document.Blocks.Clear(); FileStream fileStream = new FileStream(soubor.FileName, FileMode.Open); TextRange range = new TextRange(rtbxSoubor.Document.ContentStart,rtbxSoubor.Document.ContentEnd); FileInfo fi = new FileInfo(soubor.FileName); string pripona = fi.Extension.ToUpper(); if (pripona.Equals(".TXT")) { range.Load(fileStream, DataFormats.Text); } if (pripona.Equals(".RTF")) { range.Load(fileStream, DataFormats.Rtf); } if (!(pripona.Equals(".HTML") || pripona.Equals(".TXT"))) { MessageBox.Show("Tento formát není podporován.", "Upozornění", MessageBoxButton.OK, MessageBoxImage.Warning, MessageBoxResult.OK); } } else { MessageBox.Show("Bylo kliknuto na Storno"); } }
SaveFileDialog
Tento dialog je také stejný jako Průzkumník ve Windows a slouží pro změnu k uložení požadovaného souboru.
Vlastnosti
Nejdůležitější vlastnosti jsou:
FileName
– jméno vybraného souboruFilter
– slouží k filtrování zobrazených souborů. Filtr se skládá z popisné části a příslušné přípony, oddělené svislítkem|
(viz Příklad)InitialDirectory
– nastavuje počáteční adresář, který má dialog otevřít
Příklad
C#
V následujícím příkladu je ukázka uložení text z prvku
RichTextBox
do souboru. Prvek je pojmenován
rtbxSoubor
:
private void DialogSave(object sender, RoutedEventArgs e) { SaveFileDialog soubor = new SaveFileDialog(); soubor.Filter = "TXT soubor(*.txt)|*.txt|RTF soubor(*.rtf)|*.rtf"; if (soubor.ShowDialog() == true) { FileStream fileStream = new FileStream(soubor.FileName, FileMode.Create); TextRange range = new TextRange(rtbxSoubor.Document.ContentStart, rtbxSoubor.Document.ContentEnd); range.Save(fileStream, DataFormats.Text); } else { MessageBox.Show("Bylo kliknuto na Storno"); } }
Pozn.: V příloze článku je uveden i příklad pro výběr adresáře.
V příští lekci, WPF - Kontejnerové prvky, nás čekají kontejnerové prvky.
Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 77x (1.91 MB)
Aplikace je včetně zdrojových kódů v jazyce C#