Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Teil des Lernprogramms wird der App das letzte Element hinzugefügt, die Navigation zwischen der gesamten Notizenseite und der einzelnen Notizenseite .
Bevor Sie Code zur Behandlung der In-App-Navigation schreiben, beschreiben wir das erwartete Navigationsverhalten.
In AllNotesPage, gibt es die Sammlung vorhandener Notizen und eine Schaltfläche " Neue Notiz ".
- Wenn Sie auf eine vorhandene Notiz klicken, müssen Sie zur Notizseite navigieren und die Notiz laden, auf die geklickt wurde.
- Wenn Sie auf die Schaltfläche " Neue Notiz " klicken, sollten Sie zur Notizenseite navigieren und eine leere, nicht gespeicherte Notiz laden.
Auf der Notizseite fügen Sie eine Schaltfläche " Zurück " hinzu, und es gibt schaltflächen " Speichern " und "Löschen ".
- Wenn Sie auf die Schaltfläche "Zurück" klicken, sollte die Navigation zurück zur Seite "Alle Notizen" erfolgen und dabei alle an der Notiz vorgenommenen Änderungen verworfen werden.
- Durch Klicken auf die Schaltfläche "Löschen " sollte die Notiz gelöscht und dann zurück navigiert werden.
Neue Notiz
Zunächst werden Sie die Navigation für eine neue Notiz verwalten.
Tipp
Sie können den Code für dieses Lernprogramm aus dem Repository GitHub herunterladen oder anzeigen. Um den Code, wie er in diesem Schritt dargestellt ist, anzuzeigen, sehen Sie sich diesen Commit an: navigation – neue Notiz.
Suchen Sie in AllNotesPage.xaml nach
AppBarButtoneiner neuen Notiz.Fügen Sie einen
ClickEreignishandler hinzu, und benennen Sie ihn inNewNoteButton_Click. (Weitere Informationen finden Sie unter Add-Ereignishandler im Schritt der Notizseite, wenn Sie eine Erinnerung benötigen, wie es zu tun ist.)<AppBarButton Icon="Add" Label="New note" Click="NewNoteButton_Click"/>Fügen Sie in der
NewNoteButton_ClickMethode (in AllNotesPage.xaml.cs) den folgenden Code hinzu:private void NewNoteButton_Click(object sender, RoutedEventArgs e) { // ↓ Add this. ↓ Frame.Navigate(typeof(NotePage)); }
Jede Seite verfügt über eine Frame-Eigenschaft, die einen Verweis auf die Frame-Instanz bereitstellt, zu der sie (falls vorhanden) gehört. Dies ist das Frame , wo Sie die Navigate-Methode hier aufrufen. Die Navigate Methode verwendet den Typ der Seite, zu der Sie navigieren möchten. Sie erhalten dies Type in C# mithilfe des typeof Operators.
Wenn Sie die App jetzt ausführen, können Sie auf die Schaltfläche " Neue Notiz " klicken, um zur Notizseite zu navigieren, und Sie können in den Notiz-Editor eingeben. Wenn Sie jedoch versuchen, die Notiz zu speichern, geschieht nichts. Dies liegt daran, dass noch keine Instanz des Note Modells auf der Notizseite erstellt wurde. Das tun Sie jetzt.
Öffnen Sie NotePage.xaml.cs.
Fügen Sie Code hinzu, um die OnNavigatedTo-Methode der Seite außer Kraft zu setzen.
public NotePage() { this.InitializeComponent(); } // ↓ Add this. ↓ protected override void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); noteModel = new Note(); }
Wenn Sie nun zu NotePagenavigieren, wird eine neue Instanz des Note Modells erstellt.
Vorhandene Notizen
Jetzt fügen Sie die Navigation für vorhandene Notizen hinzu. Wenn Sie derzeit auf die Notiz in der ItemsView klicken, wird die Notiz ausgewählt, aber nichts geschieht. Das Standardverhalten für die meisten Sammlungssteuerelemente ist eine einzelne Auswahl, was bedeutet, dass jeweils ein Element ausgewählt wird. Sie aktualisieren die ItemsView Option so, dass Sie anstelle der Auswahl auf ein Element wie eine Schaltfläche klicken können.
Tipp
Sie können den Code für dieses Lernprogramm aus dem Repository GitHub herunterladen oder anzeigen. Um den Code in diesem Schritt zu sehen, siehe diesen Commit: navigation – endgültige App.
Öffnen Sie AllNotesPage.xaml.
Aktualisieren Sie den XAML-Code für
ItemsViewSelectionMode = None und IsItemInvokedEnabled =True.Fügen Sie einen Handler für das ItemInvoked-Ereignis hinzu.
<ItemsView ItemsSource="{x:Bind notesModel.Notes}" Grid.Row="1" Margin="24" ItemTemplate="{StaticResource NoteItemTemplate}" <!-- ↓ Add this. ↓ --> SelectionMode="None" IsItemInvokedEnabled="True" ItemInvoked="ItemsView_ItemInvoked">Suchen Sie in AllNotesPage.xaml.cs die
ItemsView_ItemInvokedMethode. (Wenn Visual Studio es nicht für Sie erstellt hat, was passieren könnte, wenn Sie den Code kopieren und einfügen, fügen Sie ihn im nächsten Schritt hinzu.)Fügen Sie Code in der
ItemsView_ItemInvoked-Methode hinzu, um zuNotePagezu navigieren. Dieses Mal verwenden Sie eine Überladung der Navigate-Methode , mit der Sie ein Objekt an die andere Seite übergeben können. Übergeben Sie den aufgerufenenNoteParameter als zweiten Navigationsparameter.private void ItemsView_ItemInvoked(ItemsView sender, ItemsViewItemInvokedEventArgs args) { Frame.Navigate(typeof(NotePage), args.InvokedItem); }Öffnen Sie NotePage.xaml.cs.
Aktualisieren Sie die
OnNavigatedTo-Methodenüberschreibung, um den von dem AufrufNoteübergebenenNavigatezu behandeln.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. ↑ }In diesem Code überprüfen Sie zunächst, ob der übergebene Parameter ein
NoteObjekt ist. Wenn es so ist, weisen Sie es alsNoteModell der Seite zu. Wenn es sich beinullnicht um eineNotehandelt, erstellen Sie wie zuvor eine neueNote.
Rückwärtsnavigation
Schließlich müssen Sie die App aktualisieren, damit Sie von einer einzelnen Notiz zur gesamten Notizenseite zurückkehren können.
Das WinUI 3 TitleBar-Steuerelement enthält eine Zurück-Schaltfläche, die alle Fluent Design-Richtlinien für Platzierung und Darstellung erfüllt. Sie verwenden diese integrierte Schaltfläche für die Rückwärtsnavigation.
Öffnen Sie "MainWindow.xaml".
Aktualisieren Sie den XAML-Code für
TitleBarIsBackButtonVisible =Trueund IsBackButtonEnabled, indem Sie diese an die Eigenschaft Frame.CanGoBack binden.Fügen Sie einen Handler für das BackRequested-Ereignis hinzu. Ihr XAML sollte wie folgt aussehen:
<TitleBar x:Name="AppTitleBar" Title="WinUI Notes" IsBackButtonVisible="True" IsBackButtonEnabled="{x:Bind rootFrame.CanGoBack, Mode=OneWay}" BackRequested="AppTitleBar_BackRequested">Hier wird die IsBackButtonVisible-Eigenschaft auf
truefestgelegt. Dadurch wird die Schaltfläche "Zurück" in der oberen linken Ecke des App-Fensters angezeigt.Anschließend ist die IsBackButtonEnabled-Eigenschaft an die Frame.CanGoBack-Eigenschaft gebunden, sodass die Zurück-Schaltfläche nur aktiviert ist, wenn der Frame zurück navigieren kann.
Schließlich wird der BackRequested-Ereignishandler hinzugefügt. Hier platzieren Sie den Code, um zurück zu navigieren.
Fügen Sie in MainWindow.xaml.cs diesen Code der
AppTitleBar_BackRequestedMethode hinzu:private void AppTitleBar_BackRequested(TitleBar sender, object args) { // ↓ Add this. ↓ if (rootFrame.CanGoBack == true) { rootFrame.GoBack(); } // ↑ Add this. ↑ }Die
FrameKlasse verfolgt die Navigation im BackStack-Element, sodass Sie einfach durch Aufrufen der GoBack-Methode zurück zu vorherigen Seiten navigieren können. Es ist eine bewährte Methode, immer dieCanGoBack -Eigenschaft zu überprüfen, bevoraufgerufen wird.
Als Nächstes müssen Sie den Code NotePage aktualisieren, um zurück zu navigieren, nachdem die Notiz gelöscht wurde.
Öffnen Sie NotePage.xaml.cs.
Aktualisieren Sie die
DeleteButton_ClickEreignishandlermethode mit einem Aufruf derFrame.CanGoBackMethode, nachdem die Notiz gelöscht wurde: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. ↑ }
Tipp
Möglicherweise haben Sie bemerkt, dass Sie in NotePageFrame.GoBack aufrufen, während Sie in MainWindowrootFrame.GoBack aufgerufen haben. Dies liegt daran, dass die Page-Klasse eine Eigenschaft namens Frame hat, die das Frame abruft, das das Page hostet, falls vorhanden. In diesem Fall wird ein Verweis auf rootFrame erhalten.
Sie können Ihre App jetzt ausführen. Versuchen Sie, neue Notizen hinzuzufügen, zwischen Notizen zu navigieren und Notizen zu löschen.
Weitere Informationen finden Sie in den Dokumenten:
- Implementieren der Navigation zwischen zwei Seiten
- Navigationsverlauf und Rückwärtsnavigation
- Frame-Klasse, Page-Klasse
Nächste Schritte
Glückwunsch! Sie haben das Lernprogramm zum Erstellen einer WinUI-App abgeschlossen!
Die folgenden Links enthalten weitere Informationen zum Erstellen von Apps mit WinUI und dem Windows App SDK:
Windows developer