Share via


Utiliser le SDK d'application Windows dans une application Windows Forms (WinForms)

La SDK d'application Windows est la prochaine évolution de la plateforme de développement d’applications Windows. Mais cette rubrique montre comment utiliser SDK d'application Windows API (et Windows Runtime API) dans une application Windows Forms (WinForms) !

  • Dans de nombreux cas, vous souhaiterez recréer votre application WinForms sous la forme d’une application Windows UI Library 3 (WinUI 3). L’un des avantages de passer à WinUI 3 est d’avoir accès à la Système Fluent Design (voir également Concevoir et coder des applications Windows). WinUI 3 fait partie de la SDK d'application Windows. Ainsi, une application WinUI 3 peut utiliser les autres fonctionnalités et API SDK d'application Windows. Cette rubrique ne couvre pas le processus de migration de votre application WinForms vers WinUI 3.
  • Toutefois, si vous constatez que vous utilisez des fonctionnalités de WinForms qui ne sont pas encore disponibles dans WinUI 3, vous pouvez toujours utiliser SDK d'application Windows fonctionnalités (telles que le cycle de vie des applications, MRT Core, DWriteCore, etc.) dans votre application WinForms. Cette rubrique vous montre comment procéder.

Et si vous n’avez pas encore de projet WinForms existant ou si vous souhaitez vous entraîner, cette rubrique comprend des étapes pour créer un projet WinForms afin que vous puissiez suivre et le configurer pour appeler SDK d'application Windows API.

Prérequis

  1. Installation d’outils pour le SDK pour application Windows.
  2. Cette rubrique couvre les applications WinForms non empaquetées et non empaquetées. Si votre application WinForms n’est pas empaquetée (ce qui est le cas par défaut des applications WinForms), assurez-vous que toutes les dépendances pour les applications non empaquetées sont installées (consultez SDK d'application Windows guide de déploiement pour les applications dépendantes de l’infrastructure empaquetées avec un emplacement externe ou non empaquetées). Pour ce faire, consultez Téléchargements les plus récents pour le SDK d'application Windows, puis téléchargez et décompressez, puis exécutez l’un des téléchargements du runtime de mise en production stable.

Important

La version du runtime que vous installez doit correspondre à la version du package NuGet Microsoft.WindowsAppSDK que vous installerez à une étape ultérieure.

Pour plus d’informations sur les termes non empaquetés et empaquetés, consultez Avantages et inconvénients de l’empaquetage de votre application.

Créer un projet WinForms si vous n’en avez pas déjà un

Si vous avez déjà un projet WinForms, vous pouvez passer à la section suivante.

  1. Dans Visual Studio, créez un projet D’application Windows Forms C# (qui est un projet .NET). Veillez à choisir le modèle de projet avec le nom exact Windows Forms’application, et non celui de l’application Windows Forms (.NET Framework).
  2. Donnez un nom au projet et acceptez les options par défaut.

Vous disposez maintenant d’un projet qui génère une application WinForms non empaquetée.

Configurer votre projet WinForms pour SDK d'application Windows support

Tout d’abord, nous allons modifier le fichier projet.

  1. Dans Explorateur de solutions, cliquez avec le bouton droit sur votre projet, puis choisissez Modifier le fichier de projet.

  2. Cette étape vous permet d’appeler des API Windows Runtime (WinRT) (y compris SDK d'application Windows API). À l’intérieur de l’élément PropertyGroup se trouve l’élément TargetFramework , qui est défini sur une valeur telle que net6.0. Ajoutez à cette valeur de framework cible un moniker (plus précisément, un moniker de framework cible). Par exemple, utilisez ce qui suit si votre application cible Windows 10, version 2004 :

    <TargetFramework>net6.0-windows10.0.19041.0</TargetFramework>
    
  3. Également à l’intérieur de l’élément PropertyGroup , ajoutez un élément RuntimeIdentifiers , comme suit :

    <RuntimeIdentifiers>win10-x86;win10-x64;win10-arm64</RuntimeIdentifiers>
    
  4. Par défaut, une application WinForms n’est pas empaquetée (ce qui signifie qu’elle n’est pas installée à l’aide de MSIX). Une application non empaquetée doit initialiser le runtime SDK d'application Windows avant d’utiliser toute autre fonctionnalité du SDK d'application Windows. Vous pouvez le faire automatiquement lorsque votre application démarre via l’initialisation automatique. Il vous suffit de définir (également à l’intérieur de l’élément PropertyGroup ) la propriété de WindowsPackageType projet de manière appropriée, comme suit :

    <WindowsPackageType>None</WindowsPackageType>
    

    Si vous avez des besoins avancés (tels que la gestion personnalisée des erreurs ou pour charger une version spécifique de l’SDK d'application Windows), au lieu d’une initialisation automatique, vous pouvez appeler explicitement l’API du programme d’amorçage. Pour plus d’informations, consultez Utiliser le runtime SDK d'application Windows pour les applications empaquetées avec un emplacement externe ou non empaquetées.

  5. Enregistrez et fermez le fichier projet.

Ensuite, nous allons installer le package NuGet SDK d'application Windows dans le projet.

  1. Dans Explorateur de solutions, cliquez avec le bouton droit sur le nœud Dépendances de votre projet, puis choisissez Gérer les packages Nuget...
  2. Dans la fenêtre Gestionnaire de package NuGet, sélectionnez l’onglet Parcourir, puis installez le dernier package stable Microsoft.WindowsAppSDK.

Utiliser certaines fonctionnalités SDK d'application Windows dans votre application WinForms

Cette section offre un exemple très simple d’appel d’API SDK d'application Windows à partir d’une application WinForms. Il utilise la fonctionnalité MRT Core (voir Gérer les ressources avec MRT Core). Si cet exemple fonctionne pour votre projet WinForms (et si vous en avez créé un pour cette procédure pas à pas), vous pouvez suivre ces étapes.

  1. Ouvrez Form1.cs (à l’aide de la commande Afficher Designer), puis faites glisser un bouton et une étiquette hors de la boîte à outils et vers le concepteur.

  2. Double-cliquez sur button1 pour générer un gestionnaire d’événements.

  3. Nous allons maintenant ajouter du code qui utilise la classe ResourceManager dans le SDK d'application Windows pour charger une ressource de chaîne.

    1. Ajoutez un nouvel élément Fichier de ressources (.resw) à votre projet (laissez-le avec le nom par défaut Resources.resw).

    2. Une fois le fichier de ressources ouvert dans l’éditeur, créez une ressource de chaîne avec les propriétés suivantes.

      • Nom : Message
      • Valeur : Bonjour, ressources !
    3. Enregistrez et fermez le fichier de ressources.

    4. Ouvrez Form1.cs (à l’aide de la commande Afficher le code ) et modifiez le gestionnaire d’événements pour qu’il ressemble à ceci :

    private void button1_Click(object sender, EventArgs e)
    {
        // Construct a resource manager using the resource index generated during build.
        var manager =
            new Microsoft.Windows.ApplicationModel.Resources.ResourceManager();
    
        // Look up a string in the resources file using the string's name.
        label1.Text = manager.MainResourceMap.GetValue("Resources/Message").ValueAsString;
    }
    
  4. Générez le projet et exécutez l’application. Cliquez sur le bouton pour afficher la chaîne Hello, resources! .

Conseil

Si, au moment de l’exécution, vous voyez une boîte de message indiquant que l’application a besoin d’une version particulière de Windows App Runtime et vous demande si vous souhaitez l’installer maintenant, cliquez sur Oui. Cela vous amènera aux derniers téléchargements pour le SDK d'application Windows. Pour plus d’informations, consultez la section Conditions préalables ci-dessus.

Consultez également Architecture d’exécution pour en savoir plus sur la dépendance de package Framework que votre application prend lorsqu’elle utilise le SDK d'application Windows et les composants supplémentaires requis pour fonctionner dans une application non empaquetée.

Empaqueter et déployer votre application WinForms avec MSIX

Certaines fonctionnalités et API Windows (y compris les API de notifications SDK d'application Windows) nécessitent que votre application dispose d’une identité de package au moment de l’exécution (en d’autres termes, votre application doit être empaquetée). Pour plus d’informations, consultez Fonctionnalités nécessitant une identité de package.

  1. Dans Explorateur de solutions dans Visual Studio, cliquez avec le bouton droit sur la solution, puis choisissez Ajouter un>nouveau projet....
  2. Dans la boîte de dialogue Ajouter un nouveau projet , recherchez empaquetage, choisissez le modèle de projet Projet d’empaquetage d’application Windows C#, puis cliquez sur Suivant.
  3. Nommez le projet, puis cliquez sur Créer.
  4. Nous voulons spécifier les applications de la solution qui doivent être incluses dans le package. Ainsi, dans le projet d’empaquetage (et non le projet WinForms), cliquez avec le bouton droit sur le nœud Dépendances, puis choisissez Ajouter une référence de projet...
  5. Dans la liste des projets de la solution, choisissez votre projet WinForms, puis cliquez sur OK.
  6. Développezle nœudApplications dépendances> du projet d’empaquetage et vérifiez que votre projet WinForms est référencé et mis en surbrillance en gras. Cela signifie qu’il sera utilisé comme point de départ pour le package.
  7. Cliquez avec le bouton droit sur le projet d’empaquetage, puis choisissez Définir comme projet de démarrage.
  8. Cliquez avec le bouton droit sur le projet WinForms, puis choisissez Modifier le fichier projet.
  9. Supprimez , enregistrez et fermez <WindowsPackageType>None</WindowsPackageType>.
  10. Dans la liste déroulante Plateformes de solutions, choisissez x64 (au lieu de N’importe quel processeur).
  11. Vérifiez que vous pouvez générer et exécuter.

Maintenant que vous avez empaqueté votre application WinForms, vous pouvez appeler des API qui nécessitent une identité de package. Form1.cs Ouvrez donc (à l’aide de la commande Afficher le code) et modifiez le gestionnaire d’événements pour qu’il ressemble à ceci :

private void button1_Click(object sender, EventArgs e)
{
    var notification = new AppNotificationBuilder()
        .AddArgument("action", "viewConversation")
        .AddArgument("conversationId", "9813")
        .AddText("Andrew sent you a picture")
        .AddText("Check this out, The Enchantments in Washington!")
        .BuildNotification();

    AppNotificationManager.Default.Show(notification);
}

Générez et réexécutez. Cliquez sur le bouton et vérifiez qu’une notification toast s’affiche. Lorsqu’elles sont appelées à partir d’un processus qui n’a pas d’identité de package au moment de l’exécution, les API de notifications lèvent une exception.

Notes

Les étapes de cette section vous ont montré comment créer une application empaquetée. Une alternative consiste à créer une application empaquetée avec un emplacement externe. Pour vous rappeler tous ces termes, consultez Avantages et inconvénients de l’empaquetage de votre application.