Hohe DPI-Unterstützung in Windows FormsHigh DPI support in Windows Forms

Beginnend mit der .NET Framework-4.7, bietet Windows Forms Erweiterungen für allgemeine hohen dpi-WERTEN und dynamische DPI-Szenarien.Starting with the .NET Framework 4.7, Windows Forms includes enhancements for common high DPI and dynamic DPI scenarios. Dazu gehören:These include:

  • Verbesserungen bei der die Skalierung und das Layout einer Reihe von Windows Forms-Steuerelemente, z. B. die MonthCalendar Steuerelement und dem CheckedListBox Steuerelement.Improvements in the scaling and layout of a number of Windows Forms controls, such as the MonthCalendar control and the CheckedListBox control.

  • Single-Pass-Skalierung.Single-pass scaling. In der .NET Framework 4.6 und früheren Versionen wurde Skalierung über mehrere Durchläufe ausgeführt verursacht einige Steuerelemente skaliert werden mehr als notwendig war.In the .NET Framework 4.6 and earlier versions, scaling was performed through multiple passes, which caused some controls to be scaled more than was necessary.

  • Unterstützung für dynamische DPI-Szenarien, in denen der Benutzer eine Faktor für die DPI-Wert oder der Dezimalstellen ändert, nachdem Windows Forms-Anwendung gestartet wurde.Support for dynamic DPI scenarios in which the user changes the DPI or scale factor after a Windows Forms application has been launched.

In Versionen von .NET Framework, beginnend mit der .NET Framework-4.7 ist verbesserte Unterstützung für hohe DPI eine opt-in-Funktion.In versions of the .NET Framework starting with the .NET Framework 4.7, enhanced high DPI support is an opt-in feature. Konfigurieren Sie die Ihre Anwendung zu nutzen.You must configure your application to take advantage of it.

Konfigurieren Ihre Windows Forms-Anwendung auf hoher DPI-UnterstützungConfiguring your Windows Forms app for high DPI support

Die neue Windows Forms-Funktionen, die Unterstützung hoher DPI-Ausführung stehen nur in Anwendungen, die .NET Framework-4.7 und auf Windows-Betriebssystemen ab Windows 10-Ersteller-Update ausgeführt werden.The new Windows Forms features that support high DPI awareness are available only in applications that target the .NET Framework 4.7 and are running on Windows operating systems starting with the Windows 10 Creators Update.

Um hohe DPI-Unterstützung in der Windows Forms-Anwendung zu konfigurieren, müssen Sie außerdem Folgendes ausführen:In addition, to configure high DPI support in your Windows Forms application, you must do the following:

  • Deklarieren Sie die Kompatibilität mit Windows 10.Declare compatibility with Windows 10.

    Zu diesem Zweck fügen Sie Folgendes in die Manifestdatei hinzu:To do this, add the following to your manifest file:

    <compatibility xmlns="urn:schemas-microsoft.com:compatibility.v1">
      <application>
        <!-- Windows 10 compatibility -->
        <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
      </application>
    </compatibility>
    
  • Aktivieren von pro-Monitor-DPI-wissen in der "App.config" Datei.Enable per-monitor DPI awareness in the app.config file.

    Windows Forms bietet den neuen <System.Windows.Forms.ApplicationConfigurationSection> -Element zur Unterstützung der neuen Features und Anpassungen, die beginnend mit der .NET Framework-4.7 hinzugefügt.Windows Forms introduces a new <System.Windows.Forms.ApplicationConfigurationSection> element to support new features and customizations added starting with the .NET Framework 4.7. Um die neuen Funktionen nutzen, die hohen dpi-WERTEN zu unterstützen, fügen Sie Folgendes in der Anwendungskonfigurationsdatei.To take advantage of the new features that support high DPI, add the following to your application configuration file.

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

    Wichtig

    In früheren Versionen von .NET Framework können Sie zum Hinzufügen der Unterstützung für hohe DPI das Manifest verwendet.In previous versions of the .NET Framework, you used the manifest to add high DPI support. Dieser Ansatz wird nicht mehr empfohlen, da er auf die Datei "App.config" definierte Einstellungen überschreibt.This approach is no longer recommended, since it overrides settings defined on the app.config file.

  • Rufen Sie die statische EnableVisualStyles Methode.Call the static EnableVisualStyles method.

    Dies sollte der erste Methodenaufruf in der Einstiegspunkt der Anwendung sein.This should be the first method call in your application entry point. Zum Beispiel:For example:

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

Wenn Sie keine einzelne hoher DPI-FunktionenOpting out of individual high DPI features

Festlegen der DpiAwareness Wert PerMonitorV2 aktiviert alle hohe DPI Awareness Funktionen von .NET Framework-Versionen ab der .NET Framework-4.7 unterstützt.Setting the DpiAwareness value to PerMonitorV2 enables all high DPI awareness features supported by .NET Framework versions starting with the .NET Framework 4.7. In der Regel ist dies ausreichend für die meisten Windows Forms-Anwendungen.Typically, this is adequate for most Windows Forms applications. Allerdings empfiehlt es sich um eine oder mehrere einzelne Funktionen zu beenden.However, you may want to opt out of one or more individual features. Der wichtigste Grund dafür ist, dass der vorhandene Anwendungscode diese Funktion bereits verarbeitet.The most important reason for doing this is that your existing application code already handles that feature. Wenn eine Anwendung behandelt die automatische Skalierung, sollten Sie z. B. die automatische Größenänderung-Funktion wie folgt deaktivieren:For example, if your application handles auto scaling, you might want to disable the auto-resizing feature as follows:

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

Eine Liste der einzelnen Schlüssel und ihre Werte, finden Sie unter hinzufügen Konfigurationselement für Windows Forms.For a list of individual keys and their values, see Windows Forms Add Configuration Element.

Neue DPI-Change-EreignissenNew DPI change events

Drei neue Ereignisse, die beginnend mit der .NET Framework-4.7, können Sie dynamische DPI Änderungen programmgesteuert zu verarbeiten:Starting with the .NET Framework 4.7, three new events allow you to programmatically handle dynamic DPI changes:

  • DpiChangedAfterParent, der Fehler wird ausgelöst, wenn die DPI-Einstellung für ein Steuerelement programmgesteuert, nachdem ein Änderungsereignis DPI-Wert für das übergeordnete Steuerelement geändert wird oder Formular aufgetreten.DpiChangedAfterParent, which is fired when the DPI setting for a control is changed programmatically after a DPI change event for it's parent control or form has occurred.
  • DpiChangedBeforeParent, der Fehler wird ausgelöst, wenn die DPI-Einstellung für ein Steuerelement programmgesteuert, bevor ein Änderungsereignis DPI-Wert für das übergeordnete Steuerelement geändert wird oder Formular aufgetreten.DpiChangedBeforeParent, which is fired when the DPI setting for a control is changed programmatically before a DPI change event for its parent control or form has occurred.
  • DpiChanged, der Fehler wird ausgelöst, wenn die DPI-Einstellung auf dem Anzeigegerät ändert, in dem das Formular ist derzeit angezeigt.DpiChanged, which is fired when the DPI setting changes on the display device where the form is currently displayed.

Neue Hilfsmethoden und EigenschaftenNew helper methods and properties

Die .NET Framework-4.7 fügt auch eine Reihe von neuen Hilfsmethoden und Eigenschaften, die Aufschluss darüber geben DPI-Skalierung und ermöglichen es Ihnen, die DPI-Skalierung ausführen.The .NET Framework 4.7 also adds a number of new helper methods and properties that provide information about DPI scaling and allow you to perform DPI scaling. Dazu gehören:These include:

Versionsverwaltung ÜberlegungenVersioning considerations

Zusätzlich zum auf .NET Framework 4.7 "und" Ersteller-Update für Windows 10 ausgeführt wird, kann die Anwendung auch in einer Umgebung ausführen in der er nicht kompatibel mit hohen DPI-Verbesserungen ist.In addition to running on .NET Framework 4.7 and Windows 10 Creators Update, your application may also run in an environment in which it isn't compatible with high DPI improvements. In diesem Fall müssen Sie ein Fallback für Ihre Anwendung zu entwickeln.In this case, you'll need to develop a fallback for your application. Hierzu können Sie zum Ausführen benutzerdefinierte Zeichnung Skalierung behandelt.You can do this to perform custom drawing to handle scaling.

Zu diesem Zweck müssen Sie auch das Betriebssystem zu bestimmen, auf dem die app ausgeführt wird.To do this, you also need to determine the operating system on which your app is running. Sie können Code wie den folgenden verwenden:You can do that with code like the following:

// 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 die Anwendung erfolgreich Windows 10 erkennen wird nicht als ein unterstütztes Betriebssystem im Anwendungsmanifest danach wurde nicht.Note that your application won't successfully detect Windows 10 if it wasn't listed as a supported operating system in the application manifest.

Sie können auch die Version von .NET Framework suchen, denen für die Anwendung erstellt wurde:You can also check the version of the .NET Framework that the application was built against:

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

Siehe auchSee also

Windows Forms hinzufügen KonfigurationselementWindows Forms Add Configuration Element
Anpassen der Größe und Skalieren von Windows FormsAdjusting the Size and Scale of Windows Forms