Stöd för hög DPI i Windows Forms
Från och med .NET Framework 4.7 innehåller Windows Forms förbättringar för vanliga scenarier med hög DPI och dynamisk DPI. Dessa inkluderar:
Förbättringar av skalning och layout för ett antal Windows Forms-kontroller, till exempel MonthCalendar kontroll och CheckedListBox kontroll.
Enkelpasskalning I .NET Framework 4.6 och tidigare versioner utfördes skalning genom flera pass, vilket gjorde att vissa kontroller skalades mer än nödvändigt.
Stöd för dynamiska DPI-scenarier där användaren ändrar DPI eller skalningsfaktor när ett Windows Forms-program har startats.
I versioner av .NET Framework som börjar med .NET Framework 4.7 är utökat stöd för hög DPI en opt-in-funktion. Du måste konfigurera programmet så att det kan dra nytta av det.
Konfigurera din Windows Forms-app för hög DPI-support
De nya Windows Forms-funktionerna som stöder hög DPI-medvetenhet är endast tillgängliga i program som riktar sig mot .NET Framework 4.7 och körs på Windows-operativsystem som börjar med Windows 10 Creators Update.
För att konfigurera högt DPI-stöd i ditt Windows Forms-program måste du dessutom göra följande:
Deklarera kompatibilitet med Windows 10.
Det gör du genom att lägga till följande i manifestfilen:
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <application> <!-- Windows 10 compatibility --> <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" /> </application> </compatibility>
Aktivera DPI-medvetenhet per övervakare i app.config-filen.
Windows Forms introducerar ett nytt
<System.Windows.Forms.ApplicationConfigurationSection>
-element för att stödja nya funktioner och anpassningar som lagts till från och med .NET Framework 4.7. Om du vill dra nytta av de nya funktionerna som stöder hög DPI lägger du till följande i programkonfigurationsfilen.<configuration> <!-- ... other xml settings ... --> <System.Windows.Forms.ApplicationConfigurationSection> <add key="DpiAwareness" value="PerMonitorV2" /> </System.Windows.Forms.ApplicationConfigurationSection> </configuration>
Viktig
I tidigare versioner av .NET Framework använde du manifestet för att lägga till högt DPI-stöd. Den här metoden rekommenderas inte längre eftersom den åsidosätter inställningar som definierats i filen app.config.
Anropa den statiska metoden EnableVisualStyles.
Det här bör vara det första metodanropet i startpunkten för programmet. Till exempel:
static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form2()); }
Välja bort enskilda höga DPI-funktioner
Om du anger värdet DpiAwareness
till PerMonitorV2
aktiveras alla funktioner för DPI-medvetenhet som stöds av .NET Framework-versioner som börjar med .NET Framework 4.7. Detta är vanligtvis tillräckligt för de flesta Windows Forms-program. Du kanske dock vill välja bort en eller flera enskilda funktioner. Den viktigaste orsaken till detta är att din befintliga programkod redan hanterar den funktionen. Om ditt program till exempel hanterar automatisk skalning kanske du vill inaktivera funktionen för automatisk storleksändring på följande sätt:
<configuration>
<!-- ... other xml settings ... -->
<System.Windows.Forms.ApplicationConfigurationSection>
<add key="DpiAwareness" value="PerMonitorV2" />
<add key="EnableWindowsFormsHighDpiAutoResizing" value="false" />
</System.Windows.Forms.ApplicationConfigurationSection>
</configuration>
En lista över enskilda nycklar och deras värden finns i Windows Forms Add Configuration Element.
Nya DPI-ändringshändelser
Från och med .NET Framework 4.7 kan du med tre nya händelser programmatiskt hantera dynamiska DPI-ändringar:
- DpiChangedAfterParent, som utlöses när DPI-inställningen för en kontroll ändras programmatiskt efter att en DPI-ändringshändelse för den överordnade kontrollen eller formuläret har inträffat.
- DpiChangedBeforeParent, som utlöses när DPI-inställningen för en kontroll ändras programmatiskt innan en DPI-ändringshändelse för dess överordnade kontroll eller formulär har inträffat.
- DpiChanged, som utlöses när DPI-inställningen ändras på visningsenheten där formuläret visas för närvarande.
Nya hjälpmetoder och egenskaper
.NET Framework 4.7 lägger också till ett antal nya hjälpmetoder och egenskaper som ger information om DPI-skalning och gör att du kan utföra DPI-skalning. Dessa inkluderar:
LogicalToDeviceUnits, som konverterar ett värde från logiska till enhetspixlar.
ScaleBitmapLogicalToDevice, som skalar en bitmappsbild till den logiska DPI:n för en enhet.
DeviceDpi, som returnerar DPI för den aktuella enheten.
Överväganden för versionshantering
Förutom att köras på .NET Framework 4.7 och Windows 10 Creators Update kan ditt program också köras i en miljö där det inte är kompatibelt med höga DPI-förbättringar. I det här fallet måste du utveckla en reserv för ditt program. Du kan göra detta för att utföra anpassad ritning för att hantera skalning.
För att göra detta måste du också fastställa vilket operativsystem som appen körs på. Du kan göra det med kod som följande:
// 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));
Observera att programmet inte identifierar Windows 10 om det inte visas som ett operativsystem som stöds i programmanifestet.
Du kan också kontrollera vilken version av .NET Framework som programmet skapades mot:
Console.WriteLine(AppDomain.CurrentDomain.SetupInformation.TargetFrameworkName);
Se även
.NET Desktop feedback