Nouveautés de .NET 8 (Windows Forms .NET)

Cet article décrit certaines des nouvelles fonctionnalités et améliorations de Windows Forms dans .NET 8.

Vous devez connaître quelques changements cassants lors de la migration de .NET Framework vers .NET 8. Pour plus d’informations, consultez Changements cassants dans Windows Forms.

Améliorations apportées à la liaison de données

Un nouveau moteur de liaison de données était en préversion avec .NET 7 et est désormais entièrement activé dans .NET 8. Bien qu’il ne soit pas aussi étendu que le moteur de liaison de données Windows Forms existant, ce nouveau moteur est modélisé après WPF, ce qui facilite l’implémentation des principes de conception MVVM.

Les fonctionnalités de liaison de données améliorées simplifient l’utilisation complète du modèle MVVM et utilisent des mappeurs relationnels objet à partir de ViewModels dans Windows Forms. Cela réduit la quantité de code dans les fichiers code-behind. Plus important encore, il permet le partage de code entre Windows Forms et d’autres frameworks GUI .NET tels que WPF, UWP/WinUI et .NET MAUI. Il est important de noter que, bien que les frameworks GUI mentionnés précédemment utilisent XAML comme technologie d’interface utilisateur, xaml n’est pas disponible dans Windows Forms.

L’interface IBindableComponent et la BindableComponent classe pilotent le nouveau système de liaison. Control implémente l’interface et fournit de nouvelles fonctionnalités de liaison de données à Windows Forms.

Commandes de bouton

Les commandes de bouton étaient en préversion avec .NET 7 et sont désormais entièrement activées dans .NET 8. Similaire à WPF, l’instance d’un objet qui implémente l’interface ICommand peut être affectée à la propriété du Command bouton. Lorsque le bouton est cliqué, la commande est appelée.

Un paramètre facultatif peut être fourni lorsque la commande est appelée, en spécifiant une valeur pour la propriété du CommandParameter bouton.

Les Command propriétés et CommandParameter les propriétés sont définies dans le concepteur via la fenêtre Propriétés , sous (DataBindings), comme illustré par l’image suivante.

The Visual Studio properties window highlighting a Windows Forms' Button's Command and CommandParameter properties.

Les boutons écoutent également l’événement ICommand.CanExecuteChanged , ce qui amène le contrôle à interroger la ICommand.CanExecute méthode. Lorsque cette méthode est retournée true, le contrôle est activé ; le contrôle est désactivé lorsqu’il falseest retourné.

Améliorations apportées aux ppp Visual Studio

Visual Studio 2022 17.8 Présente les onglets du concepteur DPI-unwaware. Auparavant, l’onglet Concepteur Windows dans Visual Studio s’exécutait au niveau de l’ppp de Visual Studio. Cela provoque des problèmes lorsque vous concevez une application Windows Forms sans prise en charge des PPP. Vous pouvez maintenant vous assurer que le concepteur s’exécute à la même échelle que vous souhaitez que l’application s’exécute, prenant en charge les ppp ou non. Avant l’introduction de cette fonctionnalité, vous deviez exécuter Visual Studio en mode sans prise en charge des ppp, ce qui rend Visual Studio lui-même flou lors de l’application de la mise à l’échelle dans Windows. Maintenant, vous pouvez laisser Visual Studio seul et laisser le concepteur exécuter ppp sans prise en compte.

Vous pouvez activer le concepteur sans prise en charge des ppp pour le projet Windows Forms en ajoutant <ForceDesignerDPIUnaware> au fichier projet et en définissant la valeur truesur .

<PropertyGroup>
  <OutputType>WinExe</OutputType>
  <TargetFramework>net8.0-windows</TargetFramework>
  <Nullable>enable</Nullable>
  <UseWindowsForms>true</UseWindowsForms>
  <ImplicitUsings>enable</ImplicitUsings>
  <ForceDesignerDPIUnaware>true</ForceDesignerDPIUnaware>
  <ApplicationHighDpiMode>DpiUnawareGdiScaled</ApplicationHighDpiMode>
</PropertyGroup>

Important

Visual Studio lit ce paramètre lorsque le projet est chargé, et non quand il est modifié. Après avoir modifié ce paramètre, déchargez et rechargez votre projet pour que Visual Studio le respecte.

Améliorations élevées des ppp

Le rendu DPI élevé avec PerMonitorV2 a été amélioré :

  • Mettez à l’échelle correctement les contrôles imbriqués. Par exemple, un bouton qui se trouve dans un panneau, qui est placé sur une page d’onglets.

  • Mettre à l’échelle Form.MaximumSize et Form.MinimumSize les propriétés en fonction des paramètres DPI actuels du moniteur.

    À compter de .NET 8, cette fonctionnalité est activée par défaut et vous devez la désactiver pour revenir au comportement précédent.

    Pour désactiver la fonctionnalité, ajoutez-y System.Windows.Forms.ScaleTopLevelFormMinMaxSizeForDpi le paramètre dans runtimeconfig.json et définissez la valeur sur configProperties false :

    {
      "runtimeOptions": {
        "tfm": "net8.0",
        "frameworks": [
            ...
        ],
        "configProperties": {
          "System.Windows.Forms.ScaleTopLevelFormMinMaxSizeForDpi": false,
        }
      }
    }
    

Améliorations diverses

Voici d’autres changements notables :

  • Le code qui a été géré FolderBrowserDialog a été amélioré, corrigeant quelques fuites de mémoire.
  • La base de code pour Windows Forms a été lentement en cours d’activation de la nullabilité C#, en dé rootant toutes les erreurs de référence null potentielles.
  • Le System.Drawing code source a été migré vers le dépôt GitHub Windows Forms.
  • Les icônes Windows modernes sont accessibles par une nouvelle API. System.Drawing.SystemIcons.GetStockIcon L’énumération System.Drawing.StockIconId répertorie toutes les icônes système disponibles.
  • D’autres concepteurs sont disponibles au moment de l’exécution. Pour plus d’informations, consultez le problème GitHub #4908.