Podpora vysokého DPI v model Windows Forms

Počínaje rozhraním .NET Framework 4.7 model Windows Forms zahrnuje vylepšení pro běžné scénáře s vysokým rozlišením DPI a dynamickým DPI. Tady jsou některé z nich:

  • Vylepšení měřítka a rozložení řady ovládacích prvků model Windows Forms, jako MonthCalendar je ovládací prvek a CheckedListBox ovládací prvek.

  • Škálování s jedním průchodem 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 dynamických scénářů DPI, ve kterých uživatel po spuštění aplikace model Windows Forms změní faktor DPI nebo měřítko.

Ve verzích rozhraní .NET Framework počínaje rozhraním .NET Framework 4.7 je rozšířená podpora vysokého DPI funkcí opt-in. Aplikaci musíte nakonfigurovat tak, aby ji využívala.

Konfigurace model Windows Forms aplikace pro podporu vysokého DPI

Nové funkce model Windows Forms, které podporují vysoké povědomí o DPI, jsou dostupné pouze 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.

Kromě toho, pokud chcete nakonfigurovat podporu vysokého DPI v aplikaci model 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 pro jednotlivé monitory.

    model Windows Forms zavádí nový <System.Windows.Forms.ApplicationConfigurationSection> prvek, 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 EnableVisualStyles metodu.

    Toto by mělo být první volání metody v vstupním bodu aplikace. Pří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

DpiAwareness Nastavení hodnoty pro PerMonitorV2 povolení všech funkcí rozpoznávání DPI podporovaných verzemi rozhraní .NET Framework počínaje rozhraním .NET Framework 4.7. Obvykle je to adekvátní pro většinu model Windows Forms aplikací. 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 model Windows Forms Přidání elementu konfigurace.

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, když se nastavení DPI změní 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. Tady jsou některé z nich:

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 vysokým rozlišením DPI vylepšení. 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í výkres pro zpracování 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é