Windows Forms'da yüksek DPI desteği

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

  • Denetim ve denetim gibi MonthCalendar bir dizi Windows Forms denetiminin ölçeğinde ve düzeninde yapılan geliştirmeler CheckedListBox .

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

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

.NET Framework 4.7 ile başlayan .NET Framework sürümlerinde gelişmiş yüksek DPI desteği bir kabul etme özelliğidir. Uygulamanızı bundan yararlanmak için yapılandırmanız gerekir.

Windows Forms uygulamanı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 hedefleyen ve Windows 10 Creators Update ile başlayan Windows işletim sistemlerinde çalışan uygulamalarda kullanılabilir.

Ayrıca, Windows Forms uygulamanızda yüksek DPI desteğini yapılandırmak için aşağıdakileri yapmanız gerekir:

  • Windows 10 ile uyumluluğu bildirin.

    Bunu yapmak için bildirim dosyanıza aşağıdakileri ekleyin:

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

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

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

    Önemli

    .NET Framework'ün önceki sürümlerinde, yüksek DPI desteği eklemek için bildirimi kullandınız. App.config dosyasında tanımlanan ayarları geçersiz kıldığından bu yaklaşım artık önerilmez.

  • Statik EnableVisualStyles yöntemini çağırın.

    Bu, uygulama giriş noktanızdaki ilk yöntem çağrısı olmalıdır. Örnek:

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

Tek tek yüksek DPI özelliklerini geri çevirme

değerinin DpiAwareness olarak PerMonitorV2 ayarlanması, .NET Framework 4.7 ile başlayan .NET Framework sürümleri tarafından desteklenen tüm yüksek DPI tanıma özelliklerini etkinleştirir. Bu genellikle çoğu Windows Forms uygulaması için yeterlidir. Ancak, bir veya daha fazla ayrı özelliği geri çevirmek isteyebilirsiniz. Bunu yapmanın en önemli nedeni, mevcut uygulama kodunuzun bu özelliği zaten işlemesidir. Örneğin, uygulamanız otomatik ölçeklendirmeyi işlerse, otomatik yeniden boyutlandırma özelliğini aşağıdaki gibi devre dışı bırakmak isteyebilirsiniz:

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

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

</configuration>

Tek tek anahtarların ve değerlerinin listesi için bkz . Windows Forms Add Configuration Öğesi.

Yeni DPI değişiklik olayları

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

  • DpiChangedAfterParent, bir denetimin DPI ayarı, üst denetimi veya formu için bir DPI değişiklik olayı oluştuktan sonra program aracılığıyla değiştirildiğinde tetiklenir.
  • DpiChangedBeforeParent, bir denetimin DPI ayarı, üst denetimi veya formu için bir DPI değişiklik olayı gerçekleşmeden önce program aracılığıyla değiştirildiğinde tetiklenir.
  • DpiChanged, formun şu anda görüntülendiği görüntü cihazında DPI ayarı değiştiğinde tetiklenir.

Yeni yardımcı yöntemler ve özellikler

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

Sürüm oluşturma ile ilgili dikkat edilmesi gerekenler

.NET Framework 4.7 ve Windows 10 Creators Update üzerinde çalışmaya ek olarak, uygulamanız yüksek DPI geliştirmeleriyle uyumlu olmadığı bir ortamda da çalıştırılabilir. Bu durumda, uygulamanız için bir geri dönüş geliştirmeniz gerekir. Ölçeklendirmeyi işlemek için özel çizim gerçekleştirmek için bunu yapabilirsiniz.

Bunu yapmak için uygulamanızın üzerinde çalıştığı 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 listelenmemişse uygulamanızın Windows 10'un başarıyla algılamayacağını unutmayın.

Ayrıca uygulamanın oluşturulduğu .NET Framework sürümünü de de de kontrol edebilirsiniz:

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

Ayrıca bkz.