Dukungan DPI tinggi di Formulir Windows

Dimulai dengan .NET Framework 4.7, Formulir Windows mencakup penyempurnaan untuk DPI tinggi umum dan skenario DPI dinamis. Ini termasuk:

  • Penyempurnaan dalam penskalaan dan tata letak sejumlah kontrol Formulir Windows, seperti kontrol MonthCalendar dan kontrol CheckedListBox.

  • Penskalakan akses menyeluruh. Dalam .NET Framework 4.6 dan versi yang lebih lama, penskalakan dilakukan melalui beberapa pass, yang menyebabkan beberapa kontrol diskalakan lebih dari yang diperlukan.

  • Dukungan untuk skenario DPI dinamis di mana pengguna mengubah DPI atau faktor skala setelah aplikasi Formulir Windows diluncurkan.

Dalam versi .NET Framework yang dimulai dengan .NET Framework 4.7, dukungan DPI tinggi yang ditingkatkan adalah fitur keikutsertaan. Anda harus mengonfigurasi aplikasi Anda untuk memanfaatkannya.

Mengonfigurasi aplikasi Formulir Windows Anda untuk dukungan DPI tinggi

Fitur Formulir Windows baru yang mendukung kesadaran DPI tinggi hanya tersedia dalam aplikasi yang menargetkan .NET Framework 4.7 dan berjalan pada sistem operasi Windows yang dimulai dengan Pembaruan Pembuat Windows 10.

Selain itu, untuk mengonfigurasi dukungan DPI tinggi di aplikasi Formulir Windows, Anda harus melakukan hal berikut:

  • Deklarasikan kompatibilitas dengan Windows 10.

    Untuk melakukan ini, tambahkan yang berikut ini ke file manifes Anda:

    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
      <application>
        <!-- Windows 10 compatibility -->
        <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
      </application>
    </compatibility>
    
  • Aktifkan kesadaran DPI per monitor dalam file app.config .

    Formulir Windows memperkenalkan elemen baru <System.Windows.Forms.ApplicationConfigurationSection> untuk mendukung fitur dan kustomisasi baru yang ditambahkan dimulai dengan .NET Framework 4.7. Untuk memanfaatkan fitur baru yang mendukung DPI tinggi, tambahkan yang berikut ini ke file konfigurasi aplikasi Anda.

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

    Penting

    Di versi .NET Framework sebelumnya, Anda menggunakan manifes untuk menambahkan dukungan DPI tinggi. Pendekatan ini tidak lagi direkomendasikan, karena mengambil alih pengaturan yang ditentukan pada file app.config.

  • Panggil metode statis EnableVisualStyles .

    Ini harus menjadi panggilan metode pertama di titik masuk aplikasi Anda. Contohnya:

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

Memilih keluar dari fitur DPI tinggi individu

DpiAwareness Mengatur nilai untuk PerMonitorV2 memungkinkan semua fitur kesadaran DPI tinggi yang didukung oleh versi .NET Framework yang dimulai dengan .NET Framework 4.7. Biasanya, ini cukup untuk sebagian besar aplikasi Formulir Windows. Namun, Anda mungkin ingin memilih keluar dari satu atau beberapa fitur individual. Alasan terpenting untuk melakukan ini adalah bahwa kode aplikasi Anda yang ada sudah menangani fitur tersebut. Misalnya, jika aplikasi Anda menangani penskalaan otomatis, Anda mungkin ingin menonaktifkan fitur mengubah ukuran otomatis sebagai berikut:

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

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

</configuration>

Untuk daftar kunci individual dan nilainya, lihat Formulir Windows Menambahkan Elemen Konfigurasi.

Peristiwa perubahan DPI baru

Dimulai dengan .NET Framework 4.7, tiga peristiwa baru memungkinkan Anda menangani perubahan DPI dinamis secara terprogram:

  • DpiChangedAfterParent, yang diaktifkan ketika pengaturan DPI untuk kontrol diubah secara terprogram setelah peristiwa perubahan DPI untuk kontrol atau formulir induknya terjadi.
  • DpiChangedBeforeParent, yang diaktifkan ketika pengaturan DPI untuk kontrol diubah secara terprogram sebelum peristiwa perubahan DPI untuk kontrol atau formulir induknya telah terjadi.
  • DpiChanged, yang diaktifkan ketika pengaturan DPI berubah pada perangkat tampilan tempat formulir saat ini ditampilkan.

Metode dan properti pembantu baru

.NET Framework 4.7 juga menambahkan sejumlah metode dan properti pembantu baru yang menyediakan informasi tentang penskalaan DPI dan memungkinkan Anda melakukan penskalaan DPI. Ini termasuk:

Pertimbangan penerapan versi

Selain berjalan pada Pembaruan Pembuat .NET Framework 4.7 dan Windows 10, aplikasi Anda juga dapat berjalan di lingkungan di mana aplikasi tersebut tidak kompatibel dengan peningkatan DPI yang tinggi. Dalam hal ini, Anda harus mengembangkan fallback untuk aplikasi Anda. Anda dapat melakukan ini untuk melakukan gambar kustom untuk menangani penskalakan.

Untuk melakukan ini, Anda juga perlu menentukan sistem operasi tempat aplikasi Anda berjalan. Anda dapat melakukannya dengan kode seperti berikut:

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

Perhatikan bahwa aplikasi Anda tidak akan berhasil mendeteksi Windows 10 jika tidak terdaftar sebagai sistem operasi yang didukung dalam manifes aplikasi.

Anda juga dapat memeriksa versi .NET Framework yang dibangun aplikasi terhadap:

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

Baca juga