Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tato část kurzu přidá do aplikace poslední část, navigaci mezi všemi stránkami poznámek a jednotlivými stránkami poznámek .
Než napíšeme jakýkoli kód pro zpracování navigace v aplikaci, popíšeme očekávané chování navigace.
V AllNotesPagekolekci existujících poznámek a tlačítka Nová poznámka .
- Kliknutím na existující poznámku přejděte na stránku poznámky a načtěte poznámku, na kterou jsme klikli.
- Kliknutím na tlačítko Nová poznámka přejděte na stránku poznámky a načtěte prázdnou neuložené poznámku.
Na stránce poznámek přidáte tlačítko Zpět a tam jsou tlačítka Uložit a Odstranit .
- Kliknutím na tlačítko Zpět byste měli přejít zpět na stránku všech poznámek a zahodit všechny změny provedené v poznámce.
- Kliknutím na tlačítko Odstranit byste měli poznámku odstranit a pak přejít zpět.
Nová poznámka
Nejprve zpracujete navigaci pro novou poznámku.
Návod
Kód pro účely tohoto kurzu si můžete stáhnout nebo zobrazit z úložiště GitHub. Pokud chcete zobrazit kód, jak je v tomto kroku, podívejte se na toto potvrzení: navigace – nová poznámka.
V souboru AllNotesPage.xaml vyhledejte novou poznámku
AppBarButton.Přidejte obslužnou rutinu
Clickudálosti a přejmenujte ji naNewNoteButton_Click. (Pokud potřebujete připomenutí, jak to udělat, podívejte se na přidání obslužných rutin událostí v kroku stránky poznámek.)<AppBarButton Icon="Add" Label="New note" Click="NewNoteButton_Click"/>NewNoteButton_ClickDo metody (v AllNotesPage.xaml.cs) přidejte tento kód:private void NewNoteButton_Click(object sender, RoutedEventArgs e) { // ↓ Add this. ↓ Frame.Navigate(typeof(NotePage)); }
Každá stránka má vlastnost Frame , která poskytuje odkaz na instanci Frame , ke které Page patří (pokud existuje). To je Frame to, že tady voláte metodu Navigate . Metoda Navigate přebírá typ stránky, na kterou chcete přejít. To získáte Type v jazyce C# pomocí operátoru typeof .
Pokud teď aplikaci spustíte, můžete kliknutím na tlačítko Nová poznámka přejít na stránku poznámky a zadat ji do editoru poznámek. Pokud se ale pokusíte poznámku uložit, nic se nestane. Důvodem je to, že instance Note modelu ještě nebyla vytvořena na stránce poznámek. Teď to uděláte.
Otevřete NotePage.xaml.cs.
Přidejte kód pro přepsání metody OnNavigatedTo stránky.
public NotePage() { this.InitializeComponent(); } // ↓ Add this. ↓ protected override void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); noteModel = new Note(); }
Když teď přejdete na NotePage, vytvoří se nová instance Note modelu.
Existující poznámky
Teď přidáte navigaci pro existující poznámky. V současné době, když kliknete na poznámku ItemsViewv , je vybrána poznámka, ale nic se nestane. Výchozí chování většiny ovládacích prvků kolekce je jeden výběr, což znamená, že je najednou vybrána jedna položka. Aktualizujete ItemsView ho tak, aby místo jeho výběru bylo možné kliknout na položku, jako je tlačítko.
Návod
Kód pro účely tohoto kurzu si můžete stáhnout nebo zobrazit z úložiště GitHub. Pokud chcete vidět kód, jak je v tomto kroku, podívejte se na toto potvrzení: navigace – konečná aplikace.
Otevřete Soubor AllNotesPage.xaml.
Aktualizujte XAML pro
ItemsViewSelectionMode = None a IsItemInvokedEnabled =True.Přidejte obslužnou rutinu pro událost ItemInvolat .
<ItemsView ItemsSource="{x:Bind notesModel.Notes}" Grid.Row="1" Margin="24" ItemTemplate="{StaticResource NoteItemTemplate}" <!-- ↓ Add this. ↓ --> SelectionMode="None" IsItemInvokedEnabled="True" ItemInvoked="ItemsView_ItemInvoked">V AllNotesPage.xaml.cs vyhledejte metodu
ItemsView_ItemInvoked. (Pokud vám Visual Studio ho nevytvořilo, což se může stát, když kód zkopírujete a vložíte, přidejte ho v dalším kroku.)ItemsView_ItemInvokedV metodě přidejte kód pro přechod naNotePage. Tentokrát použijete přetížení metody Navigate , která umožňuje předat objekt na druhou stránku. Předejte vyvolanýNotejako druhý navigační parametr.private void ItemsView_ItemInvoked(ItemsView sender, ItemsViewItemInvokedEventArgs args) { Frame.Navigate(typeof(NotePage), args.InvokedItem); }Otevřete NotePage.xaml.cs.
OnNavigatedToAktualizujte přepsání metody pro zpracováníNote, které bylo předáno volánímNavigate.protected override void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); // ↓ Update this. ↓ if (e.Parameter is Note note) { noteModel = note; } else { noteModel = new Note(); } // ↑ Update this. ↑ }V tomto kódu nejprve zkontrolujete, jestli je předaný parametr objektem
Note. Pokud ano, přiřadíte ho jakoNotemodel stránky. Pokud jenullnebo neníNote, vytvořte novýNotejako předtím.
Zpětná navigace
Nakonec musíte aplikaci aktualizovat, abyste se mohli vrátit z jednotlivé poznámky na stránku všech poznámek.
Ovládací prvek WinUI TitleBar obsahuje tlačítko zpět, které splňuje všechny pokyny fluent Design pro umístění a vzhled. Toto předdefinované tlačítko použijete pro návratovou navigaci.
Otevřete MainWindow.xaml.
Aktualizujte XAML pro
TitleBarIsBackButtonVisible =Truea IsBackButtonEnabled vázané na Frame.CanGoBack vlastnost.Přidejte obslužnou rutinu události BackRequested . Xaml by měl vypadat takto:
<TitleBar x:Name="AppTitleBar" Title="WinUI Notes" IsBackButtonVisible="True" IsBackButtonEnabled="{x:Bind rootFrame.CanGoBack, Mode=OneWay}" BackRequested="AppTitleBar_BackRequested">Zde je vlastnost IsBackButtonVisible nastavena na
true. Díky tomu se tlačítko Zpět zobrazí v levém horním rohu okna aplikace.Poté IsBackButtonEnabled vlastnost je vázán na Frame.CanGoBack vlastnost, takže tlačítko Zpět je povoleno pouze v případě, že rámeček může přejít zpět.
Nakonec se přidá obslužná rutina události BackRequested . Tady umístíte kód, který se má vrátit.
V MainWindow.xaml.cs přidejte tento kód do
AppTitleBar_BackRequestedmetody:private void AppTitleBar_BackRequested(TitleBar sender, object args) { // ↓ Add this. ↓ if (rootFrame.CanGoBack == true) { rootFrame.GoBack(); } // ↑ Add this. ↑ }Třída
Framesleduje navigaci v backStacku, takže můžete přejít zpět na předchozí stránky jednoduše voláním metody GoBack . Před voláním je osvědčeným postupem vždy zkontrolovat vlastnostGoBack.
Dále je potřeba aktualizovat kód NotePage , aby se po odstranění poznámky vrátil zpět.
Otevřete NotePage.xaml.cs.
Aktualizujte metodu
DeleteButton_Clickobslužné rutiny události volánímFrame.CanGoBackmetody po odstranění poznámky:private async void DeleteButton_Click(object sender, RoutedEventArgs e) { if (noteModel is not null) { await noteModel.DeleteAsync(); } // ↓ Add this. ↓ if (Frame.CanGoBack == true) { Frame.GoBack(); } // ↑ Add this. ↑ }
Návod
Možná jste si všimli, že jste volali NotePageFrame.GoBack, MainWindow zatímco jste volali rootFrame.GoBack. Je to proto, že Page třída má Frame vlastnost, která získá Frame , který je hostitelem Page, pokud existuje. V tomto případě získá odkaz na rootFrame.
Teď můžete aplikaci spustit. Zkuste přidat nové poznámky, procházet mezi poznámkami a odstraňovat poznámky.
Další informace najdete v dokumentaci:
- Implementace navigace mezi dvěma stránkami
- historie navigace a zpětný pohyb
- Třída Frame, Page – třída
Další kroky
Gratulujeme! Dokončili jste kurz k vytvoření aplikace WinUI .
Následující odkazy obsahují další informace o vytváření aplikací pomocí WinUI a sady Windows App SDK:
Windows developer