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 une nouvelle page à l’application, une vue qui affiche toutes les notes précédemment créées.
Plusieurs notes et navigation
Actuellement, la vue note affiche une seule note. Pour afficher toutes vos notes enregistrées, créez une vue et un modèle : AllNotes.
- Dans le volet Explorateur de solutions, cliquez avec le bouton droit sur le dossier Views, puis sélectionnez Ajouter>Nouvel élément...
- Dans la boîte de dialogue Ajouter un nouvel élément , sélectionnez WinUI dans la liste des modèles sur le côté gauche de la fenêtre. Ensuite, sélectionnez le modèle Page vide (WinUI 3). Nommez le fichier AllNotesPage.xaml et appuyez sur Ajouter.
- Dans le volet Explorateur de solutions, cliquez avec le bouton droit sur le dossier Models, puis sélectionnez Ajouter>Classe...
- Nommez la classe AllNotes.cs et appuyez sur Ajouter.
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 : toutes les notes et tous les modèles.
Coder le modèle AllNotes
Le nouveau modèle de données représente les données requises pour afficher plusieurs notes. Ici, vous obtenez toutes les notes du stockage local de l’application et créez une collection d’objets Note que vous allez afficher dans le AllNotesPage.
Dans le volet Explorateur de solutions , ouvrez le fichier Models\AllNotes.cs .
Remplacez le code dans le AllNotes.cs fichier par ce code :
using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Threading.Tasks; using Windows.Storage; namespace WinUINotes.Models { public class AllNotes { public ObservableCollection<Note> Notes { get; set; } = new ObservableCollection<Note>(); public AllNotes() { LoadNotes(); } public async void LoadNotes() { Notes.Clear(); // Get the folder where the notes are stored. StorageFolder storageFolder = ApplicationData.Current.LocalFolder; await GetFilesInFolderAsync(storageFolder); } private async Task GetFilesInFolderAsync(StorageFolder folder) { // Each StorageItem can be either a folder or a file. IReadOnlyList<IStorageItem> storageItems = await folder.GetItemsAsync(); foreach (IStorageItem item in storageItems) { if (item.IsOfType(StorageItemTypes.Folder)) { // Recursively get items from subfolders. await GetFilesInFolderAsync((StorageFolder)item); } else if (item.IsOfType(StorageItemTypes.File)) { StorageFile file = (StorageFile)item ; Note note = new Note() { Filename = file.Name, Text = await FileIO.ReadTextAsync(file), Date = file.DateCreated.DateTime }; Notes.Add(note); } } } } }
Le code précédent déclare une collection d’éléments Note , nommé Noteset utilise la LoadNotes méthode pour charger des notes à partir du stockage local de l’application.
La Notes collection utilise un ObservableCollection, qui est une collection spécialisée qui fonctionne bien avec la liaison de données. Lorsqu’un contrôle qui répertorie plusieurs éléments, tels qu’un ItemsView, est lié à un ObservableCollectioncontrôle , les deux fonctionnent ensemble pour conserver automatiquement la liste des éléments synchronisés avec la collection. Si un élément est ajouté à la collection, le contrôle est automatiquement mis à jour avec le nouvel élément. Si un élément est ajouté à la liste, la collection est mise à jour.
En savoir plus dans la documentation :
- Classe StorageFolder, classe StorageFile, méthode IStorageItem.IsOfType
- Accéder aux fichiers et dossiers avec le SDK d’applications Windows et les API WinRT
Maintenant que le AllNotes modèle est prêt à fournir des données pour la vue, vous devez créer une instance du modèle afin AllNotesPage que la vue puisse accéder au modèle.
Dans le volet Explorateur de solutions , ouvrez le fichier Views\AllNotesPage.xaml.cs .
Dans la
AllNotesPageclasse, ajoutez ce code pour créer unAllNotesmodèle nommé notesModel :public sealed partial class AllNotesPage : Page { // ↓ Add this. ↓ private AllNotes notesModel = new AllNotes(); // ↑ Add this. ↑ public AllNotesPage() { this.InitializeComponent(); } }
Concevoir la page AllNotes
Ensuite, vous devez concevoir la vue pour prendre en charge le AllNotes modèle.
Dans le volet Explorateur de solutions , ouvrez le fichier Views\AllNotesPage.xaml .
Remplacez l’élément
<Grid> ... </Grid>par le balisage suivant :<Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <CommandBar DefaultLabelPosition="Right"> <AppBarButton Icon="Add" Label="New note"/> <CommandBar.Content> <TextBlock Text="Quick notes" Margin="16,8" Style="{ThemeResource SubtitleTextBlockStyle}"/> </CommandBar.Content> </CommandBar> <ItemsView ItemsSource="{x:Bind notesModel.Notes}" Grid.Row="1" Padding="16" > <ItemsView.Layout> <UniformGridLayout MinItemWidth="200" MinColumnSpacing="12" MinRowSpacing="12" ItemsJustification="Start"/> </ItemsView.Layout> </ItemsView> </Grid>
Le XAML précédent introduit quelques nouveaux concepts :
- Le contrôle CommandBar contient un AppBarButton. Ce bouton a un
LabeletIconest influencé par celuiCommandBarqui le contient. Par exemple, celaCommandBardéfinit la position de l’étiquette de ses boutonsRightsur . Les barres de commandes sont généralement affichées en haut de l’application, ainsi que le titre de la page. - Le contrôle ItemsView affiche une collection d’éléments et, dans ce cas, est lié à la propriété du
Notesmodèle. La façon dont les éléments sont présentés par la vue Éléments est définie via laItemsView.Layoutpropriété. Ici, vous utilisez un UniformGridLayout.
Maintenant que vous avez crééAllNotesPage, vous devez mettre à jour MainWindow.xaml une dernière fois afin qu’elle se charge AllNotesPage au lieu d’une personne.NotePage
Dans le volet Explorateur de solutions , ouvrez le fichier MainWindow.xaml .
Mettez à jour l’élément
rootFramede sorte que lesSourcePageTypepoints versviews.AllNotesPage, comme suit :<Frame x:Name="rootFrame" Grid.Row="1" SourcePageType="views:AllNotesPage"/>
Si vous exécutez l’application maintenant, vous verrez que la note que vous avez créée précédemment est chargée dans le ItemsView contrôle. Toutefois, il s’agit simplement de la représentation sous forme de chaîne de l’objet. L’élément ItemsView ne sait pas comment cet élément doit être affiché. Vous allez corriger cela dans la section suivante.
Ajouter un modèle de données
Vous devez spécifier un DataTemplate pour indiquer la ItemsView façon dont votre élément de données doit être affiché. L’objet DataTemplate est affecté à la propriété ItemsTemplate de l’objet ItemsView. Pour chaque élément de la collection, le ItemsView.ItemTemplate génère le XAML déclaré.
Dans le volet Explorateur de solutions , double-cliquez sur l’entrée AllNotesPage.xaml pour l’ouvrir dans l’éditeur XAML.
Ajoutez ce nouveau mappage d’espace de noms sur la ligne située sous le mappage pour
local:xmlns:models="using:WinUINotes.Models"Ajoutez un
<Page.Resources>élément après la balise d’ouverture<Page...>. Cette opération obtient resourceDictionary à partir de laPagepropriété Resources afin que vous puissiez y ajouter des ressources XAML.<Page x:Class="WinUINotes.Views.AllNotesPage" ... > <!-- ↓ Add this. ↓ --> <Page.Resources> </Page.Resources>À l’intérieur de l’élément
<Page.Resources>, ajoutez leDataTemplatecode qui décrit comment afficher unNoteélément.<Page.Resources> <!-- ↓ Add this. ↓ --> <DataTemplate x:Key="NoteItemTemplate" x:DataType="models:Note"> <ItemContainer> <Grid Background="LightGray"> <Grid.RowDefinitions> <RowDefinition Height="120"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <TextBlock Text="{x:Bind Text}" Margin="12,8" TextWrapping="Wrap" TextTrimming="WordEllipsis"/> <Border Grid.Row="1" Padding="8,6,0,6" Background="Gray"> <TextBlock Text="{x:Bind Date}" Foreground="White"/> </Border> </Grid> </ItemContainer> </DataTemplate> <!-- ↑ Add this. ↑ --> </Page.Resources>Dans le code XAML pour
ItemsView, affectez laItemTemplatepropriété au modèle de données que vous venez de créer :<ItemsView ItemsSource="{x:Bind notesModel.Notes}" Grid.Row="1" Margin="24" <!-- ↓ Add this. ↓ --> ItemTemplate="{StaticResource NoteItemTemplate}">Générez et exécutez l’application.
Lorsque vous utilisez l’extension de x:Bind balisage dans un DataTemplate, vous devez spécifier la x:DataType valeur sur le DataTemplate. Dans ce cas, il s’agit d’un individu Note (vous devez donc ajouter une référence d’espace de noms XAML pour Models). Le modèle de la note utilise deux TextBlock contrôles, qui sont liés aux propriétés et Text aux propriétés de Date la note. L’élément Grid est utilisé pour la disposition et pour fournir une couleur d’arrière-plan. Un élément Border est utilisé pour l’arrière-plan de la date. (L’élément XAML Border peut fournir un plan et un arrière-plan.)
Lorsque vous exécutez l’application, le modèle de données est appliqué à vos Note éléments et ressemble à ceci si vos paramètres Couleurs de personnalisation > Windows utilisent le mode Clair :
Toutefois, si vos paramètres Couleurs de personnalisation > Windows utilisent le mode Sombre, il se présente comme suit :
Il ne s’agit pas de la recherche prévue de l’application. Cela s’est produit parce qu’il existe des valeurs de couleur codées en dur dans le modèle de données de la note. Par défaut, les éléments WinUI s’adaptent à la préférence de couleur foncée ou claire de l’utilisateur. Lorsque vous définissez vos propres éléments, comme un modèle de données, vous devez faire de même.
Lorsque vous définissez une ressource dans un code XAML ResourceDictionary, vous devez attribuer une x:Key valeur pour identifier la ressource. Ensuite, vous pouvez l’utiliser x:Key pour récupérer la ressource en XAML à l’aide de l’extension de balisage ou {StaticResource} de l’extension {ThemeResource} de balisage.
- Un
{StaticResource}est le même quel que soit le thème de couleur. Il est donc utilisé pour des éléments telsFontque ouStyledes paramètres. - Une
{ThemeResource}modification basée sur le thème de couleur sélectionné, de sorte qu’elle est utilisée pourForeground,Backgroundet d’autres propriétés liées aux couleurs.
WinUI inclut une variété de ressources intégrées que vous pouvez utiliser pour que votre application suive les instructions de style Fluent, ainsi que les instructions d’accessibilité. Vous allez remplacer les couleurs codées en dur dans le modèle de données par des ressources de thème intégrées et appliquer quelques autres ressources pour correspondre aux instructions Fluent Design.
Dans le modèle de données que vous avez ajouté précédemment, mettez à jour les sections indiquées ici pour utiliser des ressources intégrées :
<DataTemplate x:Key="NoteItemTemplate" x:DataType="models:Note"> <!-- ↓ Update this. ↓ --> <ItemContainer CornerRadius="{StaticResource OverlayCornerRadius}"> <Grid Background="{ThemeResource CardBackgroundFillColorDefaultBrush}" BorderThickness="1" BorderBrush="{ThemeResource CardStrokeColorDefaultBrush}" CornerRadius="{StaticResource OverlayCornerRadius}"> <!-- ↑ Update this. ↑ --> <Grid.RowDefinitions> <RowDefinition Height="120"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <TextBlock Text="{x:Bind Text}" Margin="12,8" TextWrapping="Wrap" TextTrimming="WordEllipsis"/> <!-- ↓ Update this. ↓ --> <Border Grid.Row="1" Padding="8,6,0,6" Background="{ThemeResource SubtleFillColorSecondaryBrush}"> <TextBlock Text="{x:Bind Date}" Style="{StaticResource CaptionTextBlockStyle}" Foreground="{ThemeResource TextFillColorSecondaryBrush}"/> <!-- ↑ Update this. ↑ --> </Border> </Grid> </ItemContainer> </DataTemplate>
Maintenant, lorsque vous exécutez l’application avec un paramètre de couleur clair, elle se présente comme suit :
Et lorsque vous exécutez l’application avec un paramètre de couleur foncée, elle se présente comme suit :
En savoir plus dans la documentation :
Conseil / Astuce
L’application WinUI 3 Gallery est un excellent moyen d’en savoir plus sur les différents contrôles WinUI et instructions de conception. Pour afficher les ressources de thème utilisées dans le modèle de données, ouvrez l’application WinUI 3 Gallery dans les instructions de couleur. À partir de là, vous pouvez voir à quoi ressemblent les ressources et copier les valeurs dont vous avez besoin directement à partir de l’application.
Vous pouvez également ouvrir la page Typographie et la page Geometry pour afficher d’autres ressources intégrées utilisées dans ce modèle de données.
L’application WinUI 3 Gallery inclut des exemples interactifs de la plupart des contrôles, fonctionnalités et fonctionnalités WinUI 3. Obtenir l’application à partir du Microsoft Store ou obtenir le code source sur GitHub
Windows developer