Windows Forms'da yüksek DPI desteği

Windows Forms, .NET Framework 4.7'den başlayarak yaygın yüksek DPI ve dinamik DPI senaryoları için iyileştirmeler içerir. Bu modüller şunlardır:

  • Denetim ve denetim gibi bir dizi Windows Forms denetimlerinin ölçeklendirme ve MonthCalendar düzeninde CheckedListBox iyileştirmeler.

  • Tek geçişli ölçeklendirme. Önceki .NET Framework 4.6 ve önceki sürümlerde ölçeklendirme birden çok geçiş aracılığıyla gerçekleştirildi ve bu da bazı denetimlerin gerektiğinden daha fazla ölçeklendir gerçekleştirilene neden oldu.

  • Windows Forms uygulaması başlatıldıktan sonra kullanıcının DPI'yi veya ölçek faktörünün değişikliklerini yaptığınız dinamik DPI senaryoları için destek.

.NET Framework 4.7 ile başlayan .NET Framework gelişmiş DPI desteği bir kabul özelliğidir. Uygulamanıza avantaj sağlayacak şekilde yapılandırmanız gerekir.

Windows Forms uygulamalarınızı yüksek DPI desteği için yapılandırma

Yüksek DPI farkındalığını destekleyen yeni Windows Forms özellikleri yalnızca .NET Framework 4.7'yi hedef alan ve Windows işletim sistemlerinde çalışan uygulamalarda Windows 10 Creators Update.

Ayrıca, Windows Forms uygulamanıza yüksek DPI desteği yapılandırmak için şunları yapın:

  • Uygulamayla uyumluluk Windows 10.

    Bunu yapmak için bildirim dosyanıza şunları ekleyin:

    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
      <application>
        <!-- Windows 10 compatibility -->
        <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
      </application>
    </compatibility>
    
  • app.configdosyasında monitör başına DPI app.config etkinleştirin.

    Windows Forms, .NET Framework 4.7'den başlayarak eklenen yeni özellikleri ve özelleştirmeleri desteklemek <System.Windows.Forms.ApplicationConfigurationSection> için yeni bir öğe sunar. Yüksek DPI'yi destekleyen yeni özelliklerden yararlanmak için, uygulama yapılandırma dosyanıza aşağıdakini ekleyin.

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

    Önemli

    Önceki sürümlerde, .NET Framework DPI desteği eklemek için bildirimi kullandık. Bu yaklaşım artık önerilmez çünkü dosyada tanımlanan ayarları geçersiz app.config olur.

  • Statik yöntemi EnableVisualStyles çağırma.

    Bu, uygulama giriş noktanıza yapılan ilk yöntem çağrısıdır. Örneğin:

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

Tek tek yüksek DPI özelliklerini devre dışı bırakma

değerinin DpiAwareness olarak PerMonitorV2 ayarlayarak, .NET Framework 4.7'den başlayarak tüm .NET Framework DPI tanıma özelliklerini etkinleştirir. Genellikle, bu form formlarının çoğu Windows için yeterlidir. Ancak, bir veya daha fazla özelliği geri almak istemeysiniz. Bunu yapmak için en önemli neden, mevcut uygulama kodunuzun bu özelliği zaten işlemesidir. Örneğin, uygulamanız otomatik ölçeklendirmeyi idare ediyorsa, otomatik yeniden boyutlandırma özelliğini aşağıdaki gibi devre dışı bırakmak iyi olabilir:

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

Tek tek anahtarların ve değerlerinin listesi için bkz. Windows Forms Yapılandırma Öğesi Ekleme.

Yeni DPI değişiklik olayları

4.7 .NET Framework başlayarak, üç yeni olay dinamik DPI değişikliklerini program aracılığıyla işlemeye olanak sağlar:

  • DpiChangedAfterParent, bir denetimin üst denetimi veya formu için bir DPI değişiklik olayı oluştuktan sonra bir denetimin DPI ayarı program aracılığıyla değiştirdikten sonra bu başlatıldı.
  • DpiChangedBeforeParent, bir denetimin DPI ayarı, üst denetimi veya formu için bir DPI değişiklik olayı meydana gelmeden önce program aracılığıyla değiştirilene kadar etkindir.
  • DpiChanged, formun şu anda görüntüleniyor olduğu görüntü cihazında DPI ayarı değişirse, bu da etkindir.

Yeni yardımcı yöntemleri ve özellikleri

4.7 .NET Framework, DPI ölçeklendirme hakkında bilgi sağlayan ve DPI ölçeklendirmesi gerçekleştirmeye olanak sağlayan bir dizi yeni yardımcı yöntem ve özellik de ekler. Bu modüller şunlardır:

Sürümle ilgili dikkat edilmesi gerekenler

.NET Framework 4.7 ve Windows 10 Creators Update üzerinde çalıştırmaya ek olarak, uygulamanız yüksek DPI geliştirmeleriyle uyumlu olmayan bir ortamda da çalışıyor olabilir. Bu durumda, uygulamanıza bir geri dönüş geliştirmeniz gerekir. Ölçeklendirmeyi işlemek üzere özel çizim gerçekleştirmek için bunu gerçekleştirin.

Bunu yapmak için, uygulamanın üzerinde çalıştır olduğu işletim sistemini de belirlemeniz gerekir. Bunu aşağıdaki gibi bir kodla yapabilirsiniz:

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

Uygulama bildiriminde desteklenen bir işletim sistemi olarak Windows 10, uygulamanın bir işletim sistemi olarak listelenmiş olup olmadığını başarıyla algılamaz.

Ayrıca, uygulamanın .NET Framework sürümünü de kontrol edin:

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

Ayrıca bkz.