Prise en charge élevée des ppp dans Windows Forms

À compter du .NET Framework 4.7, Windows Forms inclut des améliorations pour les scénarios d’ppp élevés et dynamiques courants. Il s’agit notamment des paramètres suivants :

  • Améliorations apportées à un certain nombre de contrôles Windows Forms, tels que le contrôle MonthCalendar et le contrôle CheckedListBox, en termes de mise à l’échelle et de layout.

  • Mise à l’échelle à passe unique. Dans .NET Framework 4.6 et les versions antérieures, la mise à l’échelle a été effectuée via plusieurs passes, ce qui a entraîné la mise à l’échelle de certains contrôles plus que nécessaire.

  • Prise en charge des scénarios PPP dynamiques dans lesquels l’utilisateur modifie PPP ou le facteur d’échelle après le lancement d’une application Windows Forms.

Dans les versions du .NET Framework à partir de .NET Framework 4.7, la prise en charge améliorée des ppp élevés est une fonctionnalité d’opt-in. Vous devez configurer votre application pour en tirer parti.

Configuration de votre application Windows Forms pour une prise en charge élevée des ppp

Les nouvelles fonctionnalités Windows Forms qui prennent en charge la prise en charge des ppp élevés sont disponibles uniquement dans les applications qui ciblent le .NET Framework 4.7 et qui s’exécutent sur les systèmes d’exploitation Windows à partir du Mise à jour Windows 10 Créateurs.

En outre, pour configurer une prise en charge élevée des ppp dans votre application Windows Forms, vous devez effectuer les opérations suivantes :

  • Déclarez la compatibilité avec Windows 10.

    Pour ce faire, ajoutez ce qui suit à votre fichier manifeste :

    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
      <application>
        <!-- Windows 10 compatibility -->
        <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
      </application>
    </compatibility>
    
  • Activez la prise en charge des PPP par moniteur dans le fichier app.config .

    Windows Forms introduit un nouvel <System.Windows.Forms.ApplicationConfigurationSection> élément pour prendre en charge de nouvelles fonctionnalités et personnalisations ajoutées à partir du .NET Framework 4.7. Pour tirer parti des nouvelles fonctionnalités qui prennent en charge des ppp élevés, ajoutez ce qui suit au fichier de configuration de votre application.

    <configuration>
      <!-- ... other xml settings ... -->
    
      <System.Windows.Forms.ApplicationConfigurationSection>
        <add key="DpiAwareness" value="PerMonitorV2" />
      </System.Windows.Forms.ApplicationConfigurationSection>
    
    </configuration>
    

    Important

    Dans les versions précédentes du .NET Framework, vous avez utilisé le manifeste pour ajouter une prise en charge élevée des ppp. Cette approche n’est plus recommandée, car elle remplace les paramètres définis sur le fichier app.config.

  • Appelez la méthode statique EnableVisualStyles .

    Il doit s’agir du premier appel de méthode dans votre point d’entrée d’application. Par exemple :

    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form2());
    }
    

Désactivation des fonctionnalités d’un ppp élevé individuel

Définition de la DpiAwareness valeur pour PerMonitorV2 activer toutes les fonctionnalités de sensibilisation aux ppp élevés prises en charge par les versions de .NET Framework à partir de .NET Framework 4.7. En règle générale, cela convient à la plupart des applications Windows Forms. Toutefois, vous pouvez refuser une ou plusieurs fonctionnalités individuelles. La raison la plus importante est que votre code d’application existant gère déjà cette fonctionnalité. Par exemple, si votre application gère la mise à l’échelle automatique, vous pouvez désactiver la fonctionnalité de redimensionnement automatique comme suit :

<configuration>
  <!-- ... other xml settings ... -->

  <System.Windows.Forms.ApplicationConfigurationSection>
    <add key="DpiAwareness" value="PerMonitorV2" />
    <add key="EnableWindowsFormsHighDpiAutoResizing" value="false" />
  </System.Windows.Forms.ApplicationConfigurationSection>

</configuration>

Pour obtenir la liste des clés individuelles et de leurs valeurs, consultez Windows Forms Ajouter un élément de configuration.

Nouveaux événements de modification DPI

À compter de .NET Framework 4.7, trois nouveaux événements vous permettent de gérer par programmation les modifications dynamiques des PPP :

  • DpiChangedAfterParent, qui est déclenché lorsque le paramètre PPP d’un contrôle est modifié par programmation après qu’un événement de modification DPI pour son contrôle parent ou son formulaire s’est produit.
  • DpiChangedBeforeParent, qui est déclenché lorsque le paramètre PPP d’un contrôle est modifié par programmation avant qu’un événement de modification DPI pour son contrôle parent ou son formulaire ait eu lieu.
  • DpiChanged, qui est déclenché lorsque le paramètre PPP change sur l’appareil d’affichage où le formulaire est actuellement affiché.

Nouvelles méthodes et propriétés d’assistance

.NET Framework 4.7 ajoute également un certain nombre de nouvelles méthodes et propriétés d’assistance qui fournissent des informations sur la mise à l’échelle ppp et vous permettent d’effectuer une mise à l’échelle DPI. Il s’agit notamment des paramètres suivants :

Considérations relatives au contrôle de version

Outre l’exécution sur .NET Framework 4.7 et Mise à jour Windows 10 Créateurs, votre application peut également s’exécuter dans un environnement dans lequel elle n’est pas compatible avec des améliorations élevées des ppp. Dans ce cas, vous devez développer un secours pour votre application. Pour ce faire, vous pouvez effectuer un dessin personnalisé pour gérer la mise à l’échelle.

Pour ce faire, vous devez également déterminer le système d’exploitation sur lequel votre application s’exécute. Pour ce faire, vous pouvez utiliser du code comme suit :

// Create a reference to the OS version of Windows 10 Creators Update.
Version OsMinVersion = new Version(10, 0, 15063, 0);

// Access the platform/version of the current OS.
Console.WriteLine(Environment.OSVersion.Platform.ToString());
Console.WriteLine(Environment.OSVersion.VersionString);

// Compare the current version to the minimum required version.
Console.WriteLine(Environment.OSVersion.Version.CompareTo(OsMinVersion));

Notez que votre application ne détecte pas Correctement Windows 10 s’il n’a pas été répertorié comme système d’exploitation pris en charge dans le manifeste de l’application.

Vous pouvez également case activée la version du .NET Framework sur laquelle l’application a été générée :

Console.WriteLine(AppDomain.CurrentDomain.SetupInformation.TargetFrameworkName);

Voir aussi