IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

3. diel - Pozíciovanie vo WinUI 3 a C# .NET

V minulej lekcii, Jazyk XAML vo WinUI 3 a C# .NET , sme si uviedli základnú syntax jazyka XAML.

V dnešnom WinUI 3 tutoriále sa naučíme pozicovať ovládacie prvky. Spomenieme layouty, absolútnu a relatívnu pozíciu, DIP, vonkajšie a vnútorné okraje a veľkosť.

Budeme pracovať s našou aplikáciou z lekcie Úvod do Windows App SDK a WinUI 3.

Layouty

Základným nástrojom pre pozíciovanie ovládacích prvkov vo WinUI 3 sú komponenty označované ako layouts (počeštene layouty) alebo tiež kontajnery či panely. Ide o komponenty, ktoré môžu obsahovať ľubovoľné množstvo ďalších komponentov a ktoré riešia ich rozmiestnenie. Layout teda použijeme vo chvíli, keď chceme do okna vložiť viac ako jeden ovládací prvok. Layouty môžeme do seba samozrejme zanárať.

StackPanel

S jedným layoutom sme sa už stretli, konkrétne teda s layoutom StackPanel, v ktorom máme umiestnený jeden popis:

<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
    <TextBlock Text="Pozdrav zWinUI 3 aplikácia" />
</StackPanel>

Tomuto layoutu môžeme pomocou atribútu Orientation nastaviť orientáciu, ktorá ovplyvňuje jeho správanie:

  • Horizontal – prvky skladá za seba smerom zľava doprava,
  • Vertical – prvky skladá pod seba smerom zľava dole.
Skúsme si schválne do elementu <StackPanel> vložiť viac popisov <TextBlock> a zmeňme orientáciu na vertikálnu:
<StackPanel Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Center">
    <TextBlock Text="Pozdrav z WinUI 3 aplikácia" />
    <TextBlock Text="Pozdrav z WinUI 3 aplikácia" />
    <TextBlock Text="Pozdrav z WinUI 3 aplikácia" />
</StackPanel>

Popisky sa naozaj zobrazia pod sebou:

Tri popisky pod sebou - WinUI 3 - Okenné aplikácie v C# .NET - WinUI 3 - Okenné aplikácie v C# .NET

Ďalšie layouty, ako je napríklad Grid, si predstavíme ďalej v kurze.

Absolútna a relatívna pozícia

Vráťme sa teraz späť k jedinému popisku. Keďže chceme len jeden popis, môžeme ho umiestniť priamo do okna bez použitia akéhokoľvek layoutu:

<Window ...>
    <TextBlock Text="Pozdrav z WinUI 3 aplikácia" />
</Window>

Absolútna pozícia

Niekedy potrebujeme ovládací prvok umiestniť na konkrétne súradnice, teda na absolútnu pozíciu. Vo WinUI 3 je možné prvky vkladať na absolútnu pozíciu v layoutu zvanom Canvas. Keďže sa tento layout veľmi nepoužíva, tak si ho dnes bližšie popisovať nebudeme. Bez použitia Canvas si môžeme pomôcť okrajom. Umiestnime náš popis na súradnice [200;128]:

<TextBlock
    Text="Pozdrav z WinUI 3 aplikácia"
    Margin="200, 128, 0, 0" />

Pomocou atribútu Margin sme popisku nastavili vonkajšie okraje na 200 zľava a 128 zhora. Tak to vyzerá, že je ovládací prvok na pozícii [200;128], ale v skutočnosti je okolo neho okraj:

Popis s nastaveným vonkajším okrajom  - WinUI 3 - Okenné aplikácie v C# .NET - WinUI 3 - Okenné aplikácie v C# .NET

Asi najväčšia nevýhoda používania absolútnych pozícií je, že obsah okna nereaguje na roztiahnutie alebo dokonca zmenu pomeru jeho strán. Ďalšou nevýhodou je, že pokiaľ nejaký ovládací prvok zväčší svoju veľkosť, musíme ručne tie okolité posunúť, aby sa obsah okna nerozsypal. To môže byť u väčších aplikácií skutočne veľmi neprehľadné.

Relatívna pozícia

Relatívna pozícia na rozdiel od absolútnej rešpektuje okolité prvky aj samotné okno. Upravme XAML kód elementu <TextBlock> tak, aby sa centroval do elementu, v ktorom je vložený. V našom prípade bude v strede elementu <Window>:

<TextBlock
    Text="Pozdrav z WinUI 3 aplikácia"
    HorizontalAlignment="Center"
    VerticalAlignment="Center" />

HorizontalAlignment nastavuje vodorovné zarovnanie a VerticalAlignment zvislé. Keď aplikáciu teraz spustíme a okno napríklad zúžime zvisle a roztiahneme vodorovne, TextBlock je stále uprostred:

Centrovaný popis  - WinUI 3 - Okenné aplikácie v C# .NET - WinUI 3 - Okenné aplikácie v C# .NET

Okraje

Všetky komponenty, ktoré je možné vložiť do okna, majú vonkajšie a niektoré aj vnútorné okraje. Vonkajším sa hovorí Margin a tým vnútorným Padding:

Margin a Padding vo WPF v C# .NET - WinUI 3 - Okenné aplikácie v C# .NET - WinUI 3 - Okenné aplikácie v C# .NET

Každý okraj môžeme nastaviť iný pre rôzne strany alebo ho na všetkých stranách nastaviť na jednu veľkosť.

Vymažeme obsah z okna TextBlock a namiesto neho vložíme tlačidlo pomocou nasledujúceho XAML kódu:

<Button
    Content="Tlačidlo"
    HorizontalAlignment="Center"
    VerticalAlignment="Center"
    Width="75"
    Margin="100, 0, 0, 0"
    Padding="0, 50, 0, 0" />

Výsledok vyzerá takto:

Tlačidlo s nastavenými okrajmi  - WinUI 3 - Okenné aplikácie v C# .NET - WinUI 3 - Okenné aplikácie v C# .NET

Je vidieť, že hoci je tlačidlo zarovnané do stredu, jeho vonkajší okraj je na ľavej strane 100. Túto hodnotu sme nastavili pomocou Margin. Na vnútornom okraji tlačidla naopak vidíme, že ten horný je výrazne väčší ako ostatní. To je hodnota 50 v Padding.

Hodnoty zadávame v poradí: ľavý, horný, pravý, dolný okraj a oddeľujeme ich čiarkami. Je možné zadať len jednu hodnotu, ktorá nastaví všetky okraje na rovnakú veľkosť. Rovnako tak môžeme zadať aj dve hodnoty, jednu pre vodorovné okraje a jednu pre zvislé.

Device Independent Pixels

Veľkosti zadávame v jednotkách DIP. DIP označuje Device I ndependent P ixels. Pri DPI 96, čo je predvolená hodnota po inštalácii Windows, má 1 DIP veľkosť 1 fyzického pixelu na displeji. Užívatelia veľkých monitorov majú nastavené vyššie DPI (D ots P er Inch, bodov na palec) a teda 1 DIP vychádza napr. na 1.25 fyzického pixelu. DIP sú stále dôležitejšie, pretože sa dajú bežne kúpiť aj 4k displeje, ktoré majú 4x väčšie rozlíšenie ako tie, ktoré sú teraz štandardom. Ak by sa namiesto DIP používali obyčajné pixely, naša aplikácia by nebola na takomto displeji pomaly ani vidieť. S DIP bude vyzerať stále rovnako, WinUI 3 teda prispôsobí všetko za nás.

Výška a šírka komponentov

Všimnime si, že sme tlačidlu v príklade vyššie zadali šírku pomocou atribútu Width. Podobne by sme mohli nastaviť aj výšku pomocou atribútu Height. Okrem DIP tu môžeme nastaviť aj hodnotu Auto, ktorá je predvolená. Veľkosť sa potom určí podľa obsahu komponentu, napríklad podľa dĺžky textu popisu tlačidla. Môžeme tiež nastaviť minimálny alebo maximálny rozmer pomocou atribútov MinWidth, MinHeight, MaxWidth a MaxHeight.

Zarovnanie

Na koniec dnešnej lekcie si ešte niečo málo doplníme na zarovnanie ovládacích prvkov. Upravme XAML kód tlačidla tak, aby vyzeral nasledovne:

<Button Content="Tlačidlo" />

Tlačidlo sa vo zvislom smere zarovná doprostred a vo vodorovnom doľava:

Predvolené zarovnanie tlačidla - WinUI 3 - Okenné aplikácie v C# .NET - WinUI 3 - Okenné aplikácie v C# .NET

Toto ale nie je predvolené správanie všetkých prvkov. Všeobecne platí, že pokiaľ neurčíme zarovnanie, predpokladá sa v atribútoch HorizontalAlignment a VerticalAlignment hodnota Stretch, ktorá zaistí roztiahnutie cez celú dostupnú šírku respektíve výšku. Niektoré ovládacie prvky však majú vďaka predvolenému štylovaniu nastavené iné predvolené hodnoty. To je práve prípad tlačidla. Pokiaľ by sme chceli tlačidlo roztiahnuť cez celé okno, museli by sme explicitne nastaviť atribúty HorizontalAlignment a VerticalAlignment na Stretch:

<Button Content="Tlačidlo" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />

Výsledok:

Roztiahnuté tlačidlo - WinUI 3 - Okenné aplikácie v C# .NET - WinUI 3 - Okenné aplikácie v C# .NET

Atribútu HorizontalAlignment môžeme nastaviť nasledujúce hodnoty:

  • Center - zarovnanie na stred,
  • Left - zarovnanie vľavo,
  • Right - zarovnanie vpravo,
  • Stretch - roztiahnutie cez celú šírku.
Pri VerticalAlignment sú hodnoty podobné, len namiesto Left a Right nastavujeme Top a Bottom. Vyskúšajme si jednotlivé hodnoty. Ovládacie prvky sa zarovnávajú do elementu, v ktorom sú vložené. Tomuto elementu sa hovorí rodičovský (anglicky parent).

V budúcej lekcii, Návrh používateľského rozhrania kalkulačky vo WinUI 3 a C# .NET , navrhneme užívateľské rozhranie pre jednoduchú kalkulačku. Naučíme sa pri tom pracovať s layoutom Grid a predstavíme si prvky TextBox a ComboBox a veľmi užitočný nástroj WinUI 3 Gallery.


 

Predchádzajúci článok
Jazyk XAML vo WinUI 3 a C# .NET
Všetky články v sekcii
WinUI 3 - Okenné aplikácie v C# .NET
Preskočiť článok
(neodporúčame)
Návrh používateľského rozhrania kalkulačky vo WinUI 3 a C# .NET
Článok pre vás napísal Radek Vymětalík
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
...
Aktivity