Partager via


Nouveautés de Windows Forms pour .NET 8

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

Il y a quelques modifications majeures que vous devriez connaître lors de la migration de .NET Framework vers .NET 8. Pour en savoir plus, consultez Modifications importantes 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 propriétés Command et CommandParameter sont définies dans le concepteur via la fenêtre Propriétés, sous (DataBindings), comme le montre l'image suivante.

Fenêtre des propriétés de Visual Studio mettant en surbrillance les propriétés Command and CommandParameter d’un bouton Windows Forms.

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 DPI de Visual Studio

Visual Studio 2022 17.8 présente les onglets du concepteur sans pris en charge PPP. Auparavant, l’onglet Concepteur Windows dans Visual Studio fonctionnait à la résolution DPI de Visual Studio. Cela pose des problèmes lorsque vous concevez une application Windows Forms non sensibilisée au DPI. Vous pouvez maintenant vous assurer que le concepteur s'exécute à la même échelle que celle à laquelle vous souhaitez que l'application fonctionne, que ce soit en prenant en charge les DPI ou non. Avant l’introduction de cette fonctionnalité, vous deviez exécuter Visual Studio en mode non-adapté aux DPI, ce qui rendait Visual Studio flou lorsque la mise à l'échelle était appliquée dans Windows. Maintenant, vous pouvez laisser Visual Studio tranquille et permettre au concepteur de s'exécuter sans tenir compte des DPI.

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

<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 PPP élevées

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

  • Ajustez correctement l’échelle des 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 les propriétés Form.MaximumSize et Form.MinimumSize 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 le paramètre System.Windows.Forms.ScaleTopLevelFormMinMaxSizeForDpi dans configProperties et définissez la valeur sur faux :

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

Améliorations diverses

Voici d’autres changements notables :

  • Le code qui gérait FolderBrowserDialog a été amélioré, corrigeant quelques fuites de mémoire.
  • La base de code pour Windows Forms a lentement activé la nullabilité C#, en effectuant un rootage de toutes les erreurs de référence nulle 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.