Podpora vysokého DPI ve Windows Forms
Od rozhraní .NET Framework 4.7 windows Forms zahrnuje vylepšení pro běžné scénáře s vysokým rozlišením DPI a dynamickým DPI. Patří mezi ně:
Vylepšení škálování a rozložení řady ovládacích prvků Windows Forms, jako je MonthCalendar ovládací prvek a ovládací prvek CheckedListBox.
Jednoprůchodové škálování V rozhraní .NET Framework 4.6 a starších verzích bylo škálování provedeno několika průchody, což způsobilo, že se některé ovládací prvky škálovaly více, než bylo nutné.
Podpora pro dynamické scénáře DPI, ve kterých uživatel změní DPI nebo měřítko po spuštění aplikace Windows Forms.
Ve verzích rozhraní .NET Framework, počínaje verzí 4.7, je vylepšená podpora vysokého DPI funkcí, která musí být aktivována ručně. Aplikaci musíte nakonfigurovat tak, aby ji využívala.
Konfigurace aplikace Windows Forms pro podporu vysokého DPI
Nové funkce Modelu Windows Forms, které podporují vysoké povědomí o DPI, jsou dostupné jenom v aplikacích, které cílí na rozhraní .NET Framework 4.7 a běží v operačních systémech Windows počínaje aktualizací Windows 10 Creators Update.
Pokud chcete navíc nakonfigurovat podporu vysokého DPI v aplikaci Windows Forms, musíte udělat toto:
Deklarujte kompatibilitu s Windows 10.
Uděláte to tak, že do souboru manifestu přidáte následující:
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <application> <!-- Windows 10 compatibility --> <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" /> </application> </compatibility>
V souboru app.config povolte rozpoznávání DPI podle monitoru.
Windows Forms zavádí nový prvek
<System.Windows.Forms.ApplicationConfigurationSection>
, který podporuje nové funkce a vlastní nastavení přidané od rozhraní .NET Framework 4.7. Pokud chcete využívat nové funkce, které podporují vysoké DPI, přidejte do konfiguračního souboru aplikace následující.<configuration> <!-- ... other xml settings ... --> <System.Windows.Forms.ApplicationConfigurationSection> <add key="DpiAwareness" value="PerMonitorV2" /> </System.Windows.Forms.ApplicationConfigurationSection> </configuration>
Důležitý
V předchozích verzích rozhraní .NET Framework jste pomocí manifestu přidali podporu vysokého DPI. Tento přístup se už nedoporučuje, protože přepíše nastavení definovaná v souboru app.config.
Volejte statickou metodu EnableVisualStyles.
Toto by mělo být první volání metody v vstupním bodu aplikace. Například:
static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form2()); }
Výslovný nesouhlas s individuálními funkcemi s vysokým rozlišením DPI
Nastavení hodnoty DpiAwareness
na PerMonitorV2
umožňuje všechny funkce pro rozpoznávání DPI podporované verzemi rozhraní .NET Framework počínaje rozhraním .NET Framework 4.7. Obvykle je to adekvátní pro většinu aplikací Windows Forms. Můžete ale chtít vyjádřit výslovný nesouhlas s jednou nebo více individuálními funkcemi. Nejdůležitějším důvodem k tomu je, že stávající kód aplikace už tuto funkci zpracovává. Pokud například vaše aplikace zpracovává automatické škálování, můžete funkci automatické změny velikosti zakázat následujícím způsobem:
<configuration>
<!-- ... other xml settings ... -->
<System.Windows.Forms.ApplicationConfigurationSection>
<add key="DpiAwareness" value="PerMonitorV2" />
<add key="EnableWindowsFormsHighDpiAutoResizing" value="false" />
</System.Windows.Forms.ApplicationConfigurationSection>
</configuration>
Seznam jednotlivých klíčů a jejich hodnot najdete v tématu Windows Forms Add Configuration Element.
Nové události změny DPI
Počínaje rozhraním .NET Framework 4.7 umožňují tři nové události programově zpracovávat dynamické změny DPI:
- DpiChangedAfterParent, který se aktivuje, když se nastavení DPI ovládacího prvku změní programově po události změny DPI nadřazeného ovládacího prvku nebo formuláře.
- DpiChangedBeforeParent, který se aktivuje, když se nastavení DPI ovládacího prvku změní programově před událostí změny DPI pro nadřazený ovládací prvek nebo formulář.
- DpiChanged, který se aktivuje při změně nastavení DPI na zobrazovacím zařízení, kde je formulář aktuálně zobrazen.
Nové pomocné metody a vlastnosti
Rozhraní .NET Framework 4.7 také přidává řadu nových pomocných metod a vlastností, které poskytují informace o škálování DPI a umožňují provádět škálování DPI. Patří mezi ně:
LogicalToDeviceUnits, který převede hodnotu z logického na pixely zařízení.
ScaleBitmapLogicalToDevice, která škáluje rastrový obrázek na logickou DPI zařízení.
DeviceDpi, který vrátí DPI pro aktuální zařízení.
Aspekty správy verzí
Kromě spouštění v rozhraní .NET Framework 4.7 a Windows 10 Creators Update může vaše aplikace běžet také v prostředí, ve kterém není kompatibilní s vylepšeními pro vysokou hustotu DPI. V takovém případě budete muset pro svou aplikaci vytvořit záložní verzi. Můžete to udělat, pokud chcete provést vlastní kreslení pro zvládnutí měřítka.
K tomu je také potřeba určit operační systém, na kterém je vaše aplikace spuštěná. Můžete to udělat pomocí kódu, jako je následující:
// 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));
Mějte na paměti, že vaše aplikace nebude úspěšně zjišťovat Windows 10, pokud nebyla uvedená jako podporovaný operační systém v manifestu aplikace.
Můžete také zkontrolovat verzi rozhraní .NET Framework, pro kterou byla aplikace vytvořena:
Console.WriteLine(AppDomain.CurrentDomain.SetupInformation.TargetFrameworkName);
Viz také
.NET Desktop feedback