Nouveautés de Windows Forms pour .NET 7

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

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

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.

  • Mettez à l’échelle Form.MaximumSize et Form.MinimumSize les propriétés en fonction des paramètres DPI de moniteur actuels pour les applications qui s’exécutent ApplicationHighDpiMode sur PerMonitorV2.

    Dans .NET 7, cette fonctionnalité est désactivée par défaut et vous devez choisir de recevoir cette modification. À 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 activer la fonctionnalité, définissez le configProperties paramètre dans runtimeconfig.json :

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

Améliorations et correctifs d’accessibilité

Cette version ajoute d’autres améliorations à l’accessibilité, y compris, mais pas seulement aux éléments suivants :

Améliorations de la liaison de données (préversion)

Bien que Windows Forms ait déjà un moteur de liaison puissant, une forme plus moderne de liaison de données, similaire à la liaison de données fournie par WPF, est introduite.

Les nouvelles fonctionnalités de liaison de données vous permettent d’adopter entièrement le modèle MVVM et l’utilisation de mappeurs relationnels objet à partir de ViewModels dans Windows Forms plus facile qu’auparavant. Cela, à son tour, permet de réduire le code dans les fichiers code-behind et ouvre de nouvelles possibilités de test. 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. Et pour clarifier une question fréquemment posée, il n’existe aucun plan pour introduire XAML dans Windows Forms.

Ces nouvelles fonctionnalités de liaison de données sont en préversion pour .NET 7, et d’autres travaux sur cette fonctionnalité se produisent dans .NET 8.

Pour activer la nouvelle liaison, ajoutez le EnablePreviewFeatures paramètre à votre fichier projet. Ceci est pris en charge dans C# et Visual Basic.

<Project Sdk="Microsoft.NET.Sdk">

  <!-- other settings -->

  <PropertyGroup>
    <EnablePreviewFeatures>true</EnablePreviewFeatures>
  </PropertyGroup>

</Project>

L’extrait de code suivant illustre les nouvelles propriétés, événements et méthodes ajoutés aux différentes classes dans Windows Forms. Même si l’exemple de code suivant est en C#, il s’applique également à Visual Basic.

public class Control  {
    [BindableAttribute(true)]
    public virtual object DataContext { get; set; }
    [BrowsableAttribute(true)]
    public event EventHandler DataContextChanged;
    protected virtual void OnDataContextChanged(EventArgs e);
    protected virtual void OnParentDataContextChanged(EventArgs e);
}

[RequiresPreviewFeaturesAttribute]
public abstract class BindableComponent : Component, IBindableComponent, IComponent, IDisposable {
    protected BindableComponent();
    public BindingContext? BindingContext { get; set; }
    public ControlBindingsCollection DataBindings { get; }
    public event EventHandler BindingContextChanged;
    protected virtual void OnBindingContextChanged(EventArgs e);
}

public abstract class ButtonBase : Control {
    [BindableAttribute(true)]
    [RequiresPreviewFeaturesAttribute]
    public ICommand? Command { get; set; }
    [BindableAttribute(true)]
    public object? CommandParameter { [RequiresPreviewFeaturesAttribute] get; [RequiresPreviewFeaturesAttribute] set; }
    [RequiresPreviewFeaturesAttribute]
    public event EventHandler? CommandCanExecuteChanged;
    [RequiresPreviewFeaturesAttribute]
    public event EventHandler? CommandChanged;
    [RequiresPreviewFeaturesAttribute]
    public event EventHandler? CommandParameterChanged;
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnCommandCanExecuteChanged(EventArgs e);
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnCommandChanged(EventArgs e);
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnCommandParameterChanged(EventArgs e);
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnRequestCommandExecute(EventArgs e);
}

public abstract class ToolStripItem : BindableComponent, IComponent, IDisposable, IDropTarget {
    [BindableAttribute(true)]
    [RequiresPreviewFeaturesAttribute]
    public ICommand Command { get; set; }
    [BindableAttribute(true)]
    public object CommandParameter { [RequiresPreviewFeaturesAttribute] get; [RequiresPreviewFeaturesAttribute] set; }
    [RequiresPreviewFeaturesAttribute]
    public event EventHandler CommandCanExecuteChanged;
    [RequiresPreviewFeaturesAttribute]
    public event EventHandler CommandChanged;
    [RequiresPreviewFeaturesAttribute]
    public event EventHandler CommandParameterChanged;
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnCommandCanExecuteChanged(EventArgs e);
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnCommandChanged(EventArgs e);
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnCommandParameterChanged(EventArgs e);
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnRequestCommandExecute(EventArgs e);
}

Améliorations diverses

Voici d’autres changements notables :

  • La gestion des glisser-déplacer correspond à la fonctionnalité de glisser-déplacer Windows avec des effets d’affichage plus riches tels que les icônes et les étiquettes de texte.
  • Les boîtes de dialogue dossier et fichier permettent d’obtenir d’autres options :
    • Ajouter à la version récente
    • Vérifier l’accès en écriture
    • Mode étendu
    • OK nécessite une interaction
    • Sélectionner en lecture seule
    • Afficher les fichiers masqués
    • Afficher les emplacements épinglés
    • Afficher l’aperçu
  • ErrorProvider a une HasErrors propriété maintenant.
  • La disposition d’alignement du formulaire est fixe pour Windows 11.

Voir aussi