
Vývoj pre Windows 10 – Štruktúra používateľského rozhrania aplikácie / 10. časť
Späť na úvod >> Späť na programovanie >> Späť na seriál
Len málo aplikácií vystačí s používateľským rozhraním, ktoré sa zmestí na jednu obrazovku. Preto dizajnéri a vývojári používajú rôzne spôsoby ako zväčšiť plochu, ktorú má používateľ k dispozícii na ovládanie aplikácie a na ktorej zároveň aplikácie zobrazuje požadované informácie. V prípade univerzálnych aplikácií je návrh štruktúry používateľského rozhrania obzvlášť dôležitý, pretože aplikácia môže bežať tak na veľkom monitore, ako aj na malom displeji telefónu.
Návrh používateľského rozhrania sa začína odvíjať od takzvanej hlavnej, alebo domovskej stránky aplikácie, ktorá musí mať prehľadne členené ovládacie prvky, napríklad tlačidlá, položky menu, alebo záložky, pomocou ktorých sa používateľovi zobrazujú ďalšie obrazovky, časti obrazovky, alebo dialógové okná. Veľa vývojárov si vo Windows 8.1 obľúbilo vodorovne rolovateľné virtuálne obrazovky, nazývané v originálnej terminológii hub.
V príklade si ukážeme navigáciu z domovskej obrazovky aplikácie na obrazovky pre jednotlivé funkcie, alebo skupiny funkcií a následný návrat na domovskú obrazovku. Začneme vytvorením projektu UWP aplikácie, ktorá zatiaľ pozostáva len z jedinej stránky MainPage.xaml
Do projektu pomocou kontextového menu Add NewItem pridáme tri stránky typu BlankPage. Nazveme ich Page1.xaml, Page2.xaml a Page3.xaml.
Pridanie sekundárnych stránok do projektu UWP aplikácie
Do XAML kódu jednotlivých stránok pridajte riadok s textovým reťazcom obsahujúcim návrh konkrétnej stránky. Pre Page1.xaml to bude
<TextBlock FontSize="48" Text="Page 1" />
Na domovskú stránku aplikácie MainPage.xaml pridajte tlačidlo (zatiaľ len jedno) pomocou ktorého sa budete navigovať na inú stránku. Zatiaľ vôbec neriešime dizajn ani usporiadanie stránok, ide nám len o funkčnosť
<StackPanel Orientation="Horizontal">
<Button Name="navButton" Content="Page1" Margin="0,0,20,0"
Click="navButton_Click" Height="60" Width="105" />
</StackPanel>
Dvojklikom v návrhovom zobrazení vytvoríme telo kódu obsluhy udalosti
private void navButton_Click(object sender, RoutedEventArgs e)
{
this.Frame.Navigate(typeof(Page1));
}
Prechod z hlavnej stránky na stránku Page1 funguje úplne bez problémov, ale pri takomto jednoduchom kóde zostanete na tejto stránke uväznení a nemáte ako sa vrátiť na pôvodnú, alebo akúkoľvek inú stránku.
Všimnite si v zdrojovom kóde v súbore App.xaml.cs riadok
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
Frame rootFrame = Window.Current.Content as Frame;
Trieda Frame podporuje niekoľko dôležitých a užitočných metód na navigáciu medzi stránkami, predovšetkým Navigate, GoBack, a GoForward, a taktiež niekoľko parametrov ako napríklad BackStack, ForwardStack, a BackStackDepth
V našom príklade je odkaz na stránku Page1 odovzdaný v metóde Navigate. Táto metóda určuje obsah aktuálneho okna danej aplikácie k rámu, ktorý určíte a načíta do neho obsah stránky. V tomto príklade sme rámec nijako nevymedzili, takže Page1 v predvolenom nastavení prekryla stránku MainPage.xaml. Page1 je podtriedou triedy stránky. Trieda Page má vlastnosť Frame iba na čítanie, ktorý dostane Frame, obsahujúci stránku. Keď sa handler udalosti Click.
Náš príklad upravíme tak, aby mal navigačné tlačidlá, opäť s jednoduchým dizajnom a rámec so sekundárnymi stránkami sa bude zobrazovať pod tlačidlami vo vnútri hlavnej stránky. Všimnite si spôsob odovzdávania hodnoty v prvku ValueTextBox cez globálnu premennú internal static string SomeImportantValue; v App.xaml.cs
Kompletné zdrojové kódy príkladu
App.xaml.cs
namespace NavigationExample /// Provides application-specific behavior to supplement the default Application class. /// </summary> sealed partial class App : Application internal static string SomeImportantValue; /// <summary> protected override void OnLaunched(LaunchActivatedEventArgs e)
Frame rootFrame = Window.Current.Content as Frame; if (rootFrame == null) rootFrame.NavigationFailed += OnNavigationFailed; if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) // Place the frame in the current Window if (rootFrame.Content == null) } void OnNavigationFailed(object sender, NavigationFailedEventArgs e) private void OnSuspending(object sender, SuspendingEventArgs e) |
MainPage.xaml
<Page x:Class="NavigationExample.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:NavigationExample" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <StackPanel> </Frame> |
MainPage.xaml.cs
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.InteropServices.WindowsRuntime; using Windows.Foundation; using Windows.Foundation.Collections; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Controls.Primitives; using Windows.UI.Xaml.Data; using Windows.UI.Xaml.Input; using Windows.UI.Xaml.Media; using Windows.UI.Xaml.Navigation; // The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409 namespace NavigationExample private void HomeButton_Click(object sender, RoutedEventArgs e) private void BackButton_Click(object sender, RoutedEventArgs e) private void ForwardButton_Click(object sender, RoutedEventArgs e) { this.Frame.Navigate(typeof(Page2)); } } } |
Page1.xaml
<Page <StackPanel> |
Page1.xaml.cs
namespace NavigationExample private void HyperlinkButton_Click(object sender, RoutedEventArgs e) |
Page2.xaml
<Page <StackPanel> </Page> |
Page2.xaml.cs
namespace NavigationExample private void HyperlinkButton_Click(object sender, RoutedEventArgs e) protected override void OnNavigatedTo(NavigationEventArgs e) } |
Page3.xaml
<Page <StackPanel> </Page> |
Page3.xaml.cs
namespace NavigationExample protected override void OnNavigatedTo(NavigationEventArgs e) } |
Zobrazit Galériu