Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cette partie du didacticiel ajoute le dernier élément à l’application, la navigation entre la page de notes et la page de notes individuelle.
Avant d’écrire du code pour gérer la navigation dans l’application, décrivons le comportement de navigation attendu.
Dans AllNotesPage, il existe la collection de notes existantes et un bouton Nouvelle note .
- Cliquer sur une note existante doit accéder à la page de notes et charger la note qui a été cliquée.
- Si vous cliquez sur le bouton Nouvelle note , accédez à la page de notes et chargez une note vide et non enregistrée.
Dans la page de note, vous allez ajouter un bouton Précédent , et il existe des boutons Enregistrer et Supprimer .
- Cliquez sur le bouton Précédent pour revenir à la page toutes les notes, en ignorant les modifications apportées à la note.
- Cliquer sur le bouton Supprimer doit supprimer la note, puis revenir en arrière.
Nouvelle note
Tout d’abord, vous allez gérer la navigation pour une nouvelle note.
Conseil / Astuce
Vous pouvez télécharger ou afficher le code de ce didacticiel à partir du dépôt GitHub. Pour voir le code tel qu’il se trouve dans cette étape, consultez cette validation : navigation - nouvelle note.
Dans AllNotesPage.xaml, recherchez la
AppBarButtonnouvelle note.Ajoutez un gestionnaire d’événements
Clicket renommez-le .NewNoteButton_Click(Consultez Ajouter des gestionnaires d’événements à l’étape de la page de note si vous avez besoin d’un rappel pour ce faire.)<AppBarButton Icon="Add" Label="New note" Click="NewNoteButton_Click"/>Dans la
NewNoteButton_Clickméthode (dans AllNotesPage.xaml.cs), ajoutez ce code :private void NewNoteButton_Click(object sender, RoutedEventArgs e) { // ↓ Add this. ↓ Frame.Navigate(typeof(NotePage)); }
Chaque page a une propriété Frame qui fournit une référence à l’instance Frame à laquelle appartient Page (le cas échéant). C’est là Frame que vous appelez la méthode Navigate. La Navigate méthode prend le type de la page vers laquelle vous souhaitez accéder. Vous obtenez cela Type en C# à l’aide de l’opérateur typeof .
Si vous exécutez l’application maintenant, vous pouvez cliquer sur le bouton Nouvelle note pour accéder à la page de notes et taper dans l’éditeur de notes. Toutefois, si vous essayez d’enregistrer la note, rien ne se produira. Cela est dû au fait qu’une instance du Note modèle n’a pas encore été créée dans la page de note. Tu vas le faire maintenant.
Ouvrez NotePage.xaml.cs.
Ajoutez du code pour remplacer la méthode OnNavigatedTo de la page.
public NotePage() { this.InitializeComponent(); } // ↓ Add this. ↓ protected override void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); noteModel = new Note(); }
À présent, lorsque vous accédez à NotePage, une nouvelle instance du Note modèle est créée.
Notes existantes
Vous allez maintenant ajouter la navigation pour les notes existantes. Actuellement, lorsque vous cliquez sur la note dans le ItemsView, la note est sélectionnée, mais rien ne se produit. Le comportement par défaut de la plupart des contrôles de collection est une sélection unique, ce qui signifie qu’un élément est sélectionné à la fois. Vous allez mettre à jour afin ItemsView que, au lieu de le sélectionner, vous pouvez cliquer sur un élément comme un bouton.
Conseil / Astuce
Vous pouvez télécharger ou afficher le code de ce didacticiel à partir du dépôt GitHub. Pour voir le code tel qu’il se trouve dans cette étape, consultez cette validation : navigation - application finale.
Ouvrez AllNotesPage.xaml.
Mettez à jour le code XAML pour l’option
ItemsViewSelectionMode = None et IsItemInvokedEnabled =True.Ajoutez un gestionnaire pour l’événement ItemInvoked .
<ItemsView ItemsSource="{x:Bind notesModel.Notes}" Grid.Row="1" Margin="24" ItemTemplate="{StaticResource NoteItemTemplate}" <!-- ↓ Add this. ↓ --> SelectionMode="None" IsItemInvokedEnabled="True" ItemInvoked="ItemsView_ItemInvoked">Dans AllNotesPage.xaml.cs, recherchez la
ItemsView_ItemInvokedméthode. (Si Visual Studio ne l’a pas créé pour vous, ce qui peut se produire si vous copiez et collez le code, ajoutez-le à l’étape suivante.)Dans la méthode, ajoutez du
ItemsView_ItemInvokedcode pour accéder àNotePage. Cette fois, vous allez utiliser une surcharge de la méthode Navigate qui vous permet de passer un objet à l’autre page. Passez l’appelNoteen tant que deuxième paramètre de navigation.private void ItemsView_ItemInvoked(ItemsView sender, ItemsViewItemInvokedEventArgs args) { Frame.Navigate(typeof(NotePage), args.InvokedItem); }Ouvrez NotePage.xaml.cs.
Mettez à jour le remplacement de la
OnNavigatedTométhode pour gérer celuiNotequi est passé par l’appel àNavigate.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. ↑ }Dans ce code, vous vérifiez d’abord si le paramètre passé est un
Noteobjet. Si c’est le cas, vous l’affectez en tant queNotemodèle pour la page. S’il s’agitnullou non d’unNote, créez-en unNotecomme avant.
Navigation arrière
Enfin, vous devez mettre à jour l’application afin de pouvoir revenir d’une note individuelle à la page de toutes les notes.
Le contrôle TitleBar WinUI inclut un bouton Précédent qui répond à toutes les instructions Fluent Design pour le placement et l’apparence. Vous utiliserez ce bouton intégré pour la navigation arrière.
Ouvrez MainWindow.xaml.
Mettez à jour le code XAML pour l’élément
TitleBarIsBackButtonVisible =Trueet IsBackButtonEnabled lié à la propriété Frame.CanGoBack .Ajoutez un gestionnaire pour l’événement BackRequested . Votre code XAML doit ressembler à ceci :
<TitleBar x:Name="AppTitleBar" Title="WinUI Notes" IsBackButtonVisible="True" IsBackButtonEnabled="{x:Bind rootFrame.CanGoBack, Mode=OneWay}" BackRequested="AppTitleBar_BackRequested">Ici, la propriété IsBackButtonVisible est définie sur
true. Le bouton Précédent s’affiche dans le coin supérieur gauche de la fenêtre de l’application.Ensuite, la propriété IsBackButtonEnabled est liée à la propriété Frame.CanGoBack . Par conséquent, le bouton Précédent est activé uniquement si le cadre peut revenir en arrière.
Enfin, le gestionnaire d’événements BackRequested est ajouté. C’est là que vous placez le code pour revenir en arrière.
Dans MainWindow.xaml.cs, ajoutez ce code à la
AppTitleBar_BackRequestedméthode :private void AppTitleBar_BackRequested(TitleBar sender, object args) { // ↓ Add this. ↓ if (rootFrame.CanGoBack == true) { rootFrame.GoBack(); } // ↑ Add this. ↑ }La
Frameclasse effectue le suivi de la navigation dans son BackStack. Vous pouvez donc revenir aux pages précédentes simplement en appelant la méthode GoBack . Il est recommandé de toujours vérifier la propriété CanGoBack avant d’appelerGoBack.
Ensuite, vous devez mettre à jour le code pour NotePage revenir en arrière une fois la note supprimée.
Ouvrez NotePage.xaml.cs.
Mettez à jour la méthode du
DeleteButton_Clickgestionnaire d’événements avec un appel à laFrame.CanGoBackméthode après la suppression de la note :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. ↑ }
Conseil / Astuce
Vous avez peut-être remarqué que dans NotePage, vous appelez Frame.GoBack, pendant que vous MainWindow avez appelé rootFrame.GoBack. Cela est dû au fait que la classe Page a une propriété Frame qui obtient celle Frame qui héberge le Page, le cas échéant. Dans ce cas, il obtient une référence à rootFrame.
Vous pouvez maintenant exécuter votre application. Essayez d’ajouter de nouvelles notes, de naviguer d’une note à l’autre et de supprimer des notes.
En savoir plus dans la documentation :
- Implémenter la navigation entre deux pages
- historique de navigation et navigation descendante
- Classe Frame, classe Page
Étapes suivantes
Félicitations! Vous avez terminé le didacticiel Créer une application WinUI !
Les liens suivants fournissent plus d’informations sur la création d’applications avec WinUI et le Kit de développement logiciel (SDK) d’application Windows :
Windows developer