3. XAML

3.3. Operace s polem

V posledním řádku základní mřížky formuláře (s indexem 2) se bude nacházet další mřížka (Grid). Tuto mřížku rozdělíme do 3 sloupců, které využijeme jako oddělené sekce Plnit, Výstup a Výpočet s jednotlivými tlačítky - viz Kód 1. 

<!-- Tlačítka - sekce: Plnit, Výstup, Výpočet -->
<StackPanel Grid.Row="4">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <!-- Plnit -->

        <!-- Výstup -->

        <!-- Výpočet -->

    </Grid>
    <!-- Konec -->

</StackPanel>

Kód 1: StackPanel - tlačítka pro operace s maticí

Pod komentář Plnit vložíme do prvního sloupce této mřížky objekt typu StackPanel. Do tohoto objektu jako první umístíme popisek (Label) "Plnit", který bude tvořit záhlaví sekce. Pod popisek umístíme 3 tlačítka:

  • Náhodně (objekt BtnNahodne)- plnění matice prvky, kde každý prvek obsahuje náhodně vygenerovanou hodnotu na základě rovnoměrného rozdělení v intervalu, jehož dolní mez představuje hodnotu, která je načtena z prvního řádku základní mřížky, tj. hodnota ve vstupním poli (objekt TxtMinHodnota) umístěného vpravo vedle popisku Minimum a hodnota horní meze, která je načtena ze vstupního pole (objekt TxtMaxHodnota) umístěného vpravo vedle popisku Maximum
  • Jednotlivě (objekt BtnJednotlive) - plnění matice hodnotou uvedenou ve vstupním poli (objekt TxtHodnota) umístěného vpravo vedle popisku Hodnota. Prvek je umístěn v matici v řádku a sloupci, kde index řádku je určen pomocí hodnoty zadané ve vstupním poli (objekt TxtPrvekIndexRadku) umístěného vpravo vedle popisku Index řádku: a index sloupce je načten ze vstupního pole (objekt TxtPrvekIndexSloupce) umístěného vpravo od popisku Index sloupce:. Všechna tři vstupní pole jsou umístěna v prvním řádku základní mřížky
  • Nulovat (objekt BtnNulovat) - plnění prvků matice hodnotou 0

U všech tlačítek nastavíme vnitřní okraje (vlastnost Padding) a také vnější okraje (vlastnost Margin). Pro všechna tlačítka vygenerujeme obsluhu události stisknutí tlačítka (událost Click) pomocí nastavení vlastnosti Click a zvolení položky <New Event Handler> - viz Kód 2.

<!-- Plnit -->
<StackPanel >
    <Label Content="Plnit:" FontWeight="Bold" FontSize="16" HorizontalAlignment="Center"/>
    <Button Name="BtnNahodne" Content="Náhodně" Margin="5" Padding="10,5" Click="BtnNahodne_Click"/>
    <Button Name="BtnJednotlive" Content="Jednotlivě" Margin="5" Padding="10,5" Click="BtnJednotlive_Click"/>
    <Button Name="BtnNulovat" Content="Nulovat" Margin="5" Padding="10,5" Click="BtnNulovat_Click"/>
</StackPanel>

Kód 2: StackPanel - tlačítka pro plnění matice

Pod komentář Výstup vložíme do druhého sloupce objekt typu StackPanel. Do tohoto objektu jako první umístíme popisek (Label) "Výstup", který bude tvořit záhlaví sekce. Pod popisek umístíme 2 tlačítka:

  • Jako text (objekt BtnJakoText) - výpis prvků matice (prvky oddělené čárkou jsou umístěny do příslušných řádků a sloupců) v objektu typu TextBox (objekt TxtVysledek)
  • Do mřížky (objekt BtnDoMrizky) - výpis prvků matice do jednotlivých řádků v objektu typu ListView  (objekt LstMatice)

U všech tlačítek nastavíme vnitřní okraje (vlastnost Padding) a také vnější okraje (vlastnost Margin). Pro všechna tlačítka vygenerujeme obsluhu události stisknutí tlačítka (událost Click) pomocí nastavení vlastnosti Click a zvolení položky <New Event Handler> - viz Kód 3.

<!-- Výstup -->
<StackPanel Grid.Column="1">
    <Label Content="Výstup:" FontWeight="Bold" FontSize="16" HorizontalAlignment="Center"/>
    <Button Name="BtnJakoText" Content="Jako text"  Margin="5" Padding="10,5" Click="BtnJakoText_Click"/>
    <Button Name="BtnDoMrizky" Content="Do mřížky" Margin="5" Padding="10,5" Click="BtnDoMrizky_Click"/>
</StackPanel>

Kód 3: StackPanel - tlačítka pro výpis prvků matice

Pod komentář Výpočet vložíme do třetího sloupce mřížky objekt typu StackPanel. Do tohoto objektu jako první umístíme popisek (Label) "Výpočet", který bude tvořit záhlaví sekce. Pod popisek umístíme 6 tlačítek:

  • Minimum (objekt BtnMinimum) - hledání prvku matice s nejmenší hodnotou, včetně vypsání pozice minima (index řádku a sloupce uvedených v hranatých závorkách)
  • Maximum (objekt BtnMaximum)- hledání prvku matice s největší hodnotou, včetně vypsání pozice maxima
  • Průměr (objekt BtnPrumer) - výpočet aritmetického průměru ze všech prvků matice
  • Seřadit (objekt BtnSeradit)- vzestupné třídění prvků v řádku matice
  • Transpozice - hlavní diagonála (objekt BtnTranspoziceHlavni) - transpozice prvků matice podle hlavní diagonály
  • Transpozice - vedlejší diagonála (objekt BtnTranspoziceVedlejsi) - transpozice prvků matice podle vedlejší diagonály

U všech tlačítek nastavíme vnitřní okraje (vlastnost Padding) a také vnější okraje (vlastnost Margin). Pro všechna tlačítka vygenerujeme obsluhu události stisknutí tlačítka (událost Click) pomocí nastavení vlastnosti Click a zvolení položky <New Event Handler> - viz Kód 4.

<StackPanel Grid.Column="2">
    <Label Content="Výpočet:" FontWeight="Bold" FontSize="16" HorizontalAlignment="Center"/>
    <Button Name="BtnMinimum" Content="Minimum"  Margin="5" Padding="10,5" Click="BtnMinimum_Click"/>
    <Button Name="BtnMaximum" Content="Maximum" Margin="5" Padding="10,5" Click="BtnMaximum_Click"/>
    <Button Name="BtnPrumer" Content="Průměr" Margin="5" Padding="10,5" Click="BtnPrumer_Click"/>
    <Button Name="BtnSeradit" Content="Seřadit" Margin="5" Padding="10,5" Click="BtnSeradit_Click"/>
    <Button Name="BtnTranspoziceHlavni" Content="Transpozice - hlavní diagonála" Margin="5" Padding="10,5" 
            Click="BtnTranspoziceHlavni_Click"/>
    <Button Name="BtnTranspoziceVedlejsi" Content="Transpozice - vedlejší diagonála" Margin="5" Padding="10,5" 
            Click="BtnTranspoziceVedlejsi_Click"/>
</StackPanel>

Kód 4: StackPanel - tlačítka pro operace s prvky matice

Pod komentář Konec umístíme objekt typu WrapPanel, který zarovnáme k pravému okraji. Do tohoto objektu umístíme tlačítko Konec, pomocí kterého uživatel zavře formulář. Nastavíme velikost vnějšího okraje (vlastnost Margin) a šířku tlačítka nastavíme na 100 pixelů - viz Kód 5.

<!-- Konec -->
<WrapPanel HorizontalAlignment="Right">
    <Button Name="BtnKonec" Content="Konec" Margin="5" Width="100" Padding="5" Click="BtnKonec_Click"/>
</WrapPanel>

Kód 5: WrapPanel - tlačítko pro zavření formuláře  

Formulář

Navržené rozložení prvků ve třetím řádku základní mřížky na formuláři v této části etapy je vidět na následujícím obrázku - viz Obrázek 1.


Obrázek 1: Rozpracovaný formulář WPF aplikace - třetí řádek základní mřížky

Objekty na formuláři:

Formulář v třetím řádku základní mřížky formuláře obsahuje následující objekty (kontrolky):

  • StackPanel (4x)
  • Grid 
  • Label (3x)
  • WrapPanel
  • Button: BtnNahodne, BtnJednotlive, BtnNulovat, BtnJakoText, BtnDoMrizky, BtnMinimum, BtnMaximum, BtnPrumer, BtnSeradit, BtnKonec, BtnTranspoziceHlavni, BtnTranspoziceVedlejsi

které jsou umístěny následujícím způsobem - viz Obrázek 2.


Obrázek 2: VS - okno Document Outline - seznam objektů - třetí řádek základní mřížky