Freigeben über


Unterstützung für hohe DPI-Werte in Windows Forms

Ab .NET Framework 4.7 bietet Windows Forms Verbesserungen für allgemeine hohe DPI- und dynamische DPI-Szenarien. Dazu gehören:

  • Verbesserungen bei der Skalierung und dem Layout einer Reihe von Windows Forms-Steuerelementen, z. B. des MonthCalendar Steuerelements und des Steuerelements CheckedListBox .

  • Einzelpass-Skalierung. In .NET Framework 4.6 und früheren Versionen wurde die Skalierung über mehrere Durchläufe durchgeführt, was dazu führte, dass einige Steuerelemente mehr skaliert wurden als erforderlich.

  • Unterstützung für dynamische DPI-Szenarien, in denen der Benutzer den DPI- oder Skalierungsfaktor ändert, nachdem eine Windows Forms-Anwendung gestartet wurde.

In Versionen von .NET Framework ab .NET Framework 4.7 ist die erweiterte Unterstützung für hohe DPI-Werte ein Opt-In-Feature. Sie müssen Ihre Anwendung so konfigurieren, um davon zu profitieren.

Konfigurieren Ihrer Windows Forms-App für hohe DPI-Unterstützung

Von Bedeutung

Diese Informationen gelten nur für .NET Framework. Informationen zum Aktivieren der Unterstützung für hohe DPI-Werte in .NET finden Sie unter Anwendungseinstellungen auf Project-Ebene.

Die neuen Windows Forms-Features, die hohe DPI-Bewusstheit unterstützen, sind nur in Anwendungen verfügbar, die auf .NET Framework 4.7 abzielen und auf Windows-Betriebssystemen ausgeführt werden, beginnend mit dem Windows 10 Creators Update.

Um die Unterstützung für hohe DPI-Werte in Ihrer Windows Forms-Anwendung zu konfigurieren, müssen Sie folgendes ausführen:

  • Deklarieren Sie die Kompatibilität mit Windows 10.

    Fügen Sie dazu der Manifestdatei Folgendes hinzu:

    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
      <application>
        <!-- Windows 10 compatibility -->
        <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
      </application>
    </compatibility>
    
  • Aktivieren Sie die DPI-Sensibilisierung pro Monitor in der app.config Datei.

    Windows Forms führt ein neues <System.Windows.Forms.ApplicationConfigurationSection> Element ein, um neue Features und Anpassungen zu unterstützen, die ab .NET Framework 4.7 hinzugefügt wurden. Um die neuen Features zu nutzen, die hohe DPI-Werte unterstützen, fügen Sie der Anwendungskonfigurationsdatei Folgendes hinzu.

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

    Von Bedeutung

    In früheren Versionen von .NET Framework haben Sie das Manifest verwendet, um unterstützung für hohen DPI-Wert hinzuzufügen. Dieser Ansatz wird nicht mehr empfohlen, da er Einstellungen außer Kraft setzt, die in der app.config Datei definiert sind.

  • Rufen Sie die statische EnableVisualStyles Methode auf.

    Dies sollte der erste Methodenaufruf in Ihrem Anwendungseinstiegspunkt sein. Beispiel:

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

Abmelden von einzelnen Features mit hohem DPI-Wert

Von Bedeutung

Diese Informationen gelten nur für .NET Framework. Informationen zum Aktivieren der Unterstützung für hohe DPI-Werte in .NET finden Sie unter Anwendungseinstellungen auf Project-Ebene.

Durch Festlegen des DpiAwareness Werts PerMonitorV2 werden alle DPI-Bewusstseinsfeatures aktiviert, die von .NET Framework-Versionen, beginnend mit .NET Framework 4.7, unterstützt werden. In der Regel ist dies für die meisten Windows Forms-Anwendungen ausreichend. Möglicherweise möchten Sie jedoch ein oder mehrere einzelne Features deaktivieren. Der wichtigste Grund dafür ist, dass ihr vorhandener Anwendungscode dieses Feature bereits behandelt. Wenn Ihre Anwendung beispielsweise mit automatischer Skalierung arbeitet, sollten Sie die automatische Größenanpassung wie unten beschrieben deaktivieren:

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

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

</configuration>

Eine Liste der einzelnen Schlüssel und deren Werte finden Sie unter Windows Forms Add Configuration Element.

Neue DPI-Änderungsereignisse

Ab .NET Framework 4.7 können Sie mit drei neuen Ereignissen dynamische DPI-Änderungen programmgesteuert behandeln:

  • DpiChangedAfterParentwird ausgelöst, wenn die DPI-Einstellung für ein Steuerelement programmgesteuert geändert wird, nachdem ein DPI-Änderungsereignis für das übergeordnete Steuerelement oder Formular aufgetreten ist.
  • DpiChangedBeforeParentwird ausgelöst, wenn die DPI-Einstellung für ein Steuerelement programmgesteuert geändert wird, bevor ein DPI-Änderungsereignis für das übergeordnete Steuerelement oder Formular aufgetreten ist.
  • DpiChangedwird ausgelöst, wenn sich die DPI-Einstellung auf dem Anzeigegerät ändert, auf dem das Formular derzeit angezeigt wird.

Neue Hilfsmethoden und -eigenschaften

Das .NET Framework 4.7 fügt außerdem eine Reihe neuer Hilfsmethoden und -eigenschaften hinzu, die Informationen zur DPI-Skalierung bereitstellen und es Ihnen ermöglichen, DPI-Skalierung durchzuführen. Dazu gehören:

Überlegungen zur Versionsverwaltung

Zusätzlich zur Ausführung auf .NET Framework 4.7 und Windows 10 Creators Update kann Ihre Anwendung auch in einer Umgebung ausgeführt werden, in der sie nicht mit hohen DPI-Verbesserungen kompatibel ist. In diesem Fall müssen Sie einen Fallback für Ihre Anwendung entwickeln. Dazu können Sie eine benutzerdefinierte Zeichnung ausführen, um die Skalierung zu verarbeiten.

Dazu müssen Sie auch das Betriebssystem bestimmen, auf dem Ihre App ausgeführt wird. Sie können dies mit Code wie den folgenden tun:

// 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));

Beachten Sie, dass Ihre Anwendung Windows 10 nicht erfolgreich erkennt, wenn sie im Anwendungsmanifest nicht als unterstütztes Betriebssystem aufgeführt wurde.

Sie können auch die Version von .NET Framework überprüfen, für die die Anwendung erstellt wurde:

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

Siehe auch