.NET 8 (Windows Forms .NET) ile ilgili yenilikler

Bu makalede, .NET 8'deki yeni Windows Forms özellikleri ve geliştirmelerinden bazıları açıklanmaktadır.

.NET Framework'ten .NET 8'e geçiş yaparken bilmeniz gereken birkaç hataya neden olan değişiklik vardır. Daha fazla bilgi için bkz . Windows Forms'da hataya neden olan değişiklikler.

Veri bağlama geliştirmeleri

.NET 7 ile yeni bir veri bağlama altyapısı önizleme aşamasındaydı ve artık .NET 8'de tam olarak etkinleştirildi. Mevcut Windows Forms veri bağlama altyapısı kadar kapsamlı olmasa da, bu yeni altyapı WPF'nin ardından modellenmiştir ve bu da MVVM tasarım ilkelerinin uygulanmasını kolaylaştırır.

Geliştirilmiş veri bağlama özellikleri, MVVM desenini tam olarak kullanmayı ve Windows Forms'daki ViewModel'lerden nesne ilişkisel eşleyiciler kullanmayı kolaylaştırır. Bu, arka planda kod dosyalarındaki kod miktarını azaltır. Daha da önemlisi, Windows Forms ile WPF, UWP/WinUI ve .NET MAUI gibi diğer .NET GUI çerçeveleri arasında kod paylaşımını etkinleştirir. Daha önce bahsedilen GUI çerçeveleri ui teknolojisi olarak XAML kullansa da XAML'nin Windows Forms'a gelmeyeceğini unutmayın.

Arabirimi IBindableComponent ve BindableComponent sınıfı yeni bağlama sistemini yönlendirir. Control arabirimini uygular ve Windows Forms'a yeni veri bağlama özellikleri sağlar.

Düğme komutları

Düğme komutları .NET 7 ile önizleme aşamasındaydı ve artık .NET 8'de tamamen etkin. WPF'ye benzer şekilde, arabirimi uygulayan bir nesnenin ICommand örneği düğmenin Command özelliğine atanabilir. Düğmeye tıklandığında komut çağrılır.

Komut çağrıldığında, düğmenin CommandParameter özelliği için bir değer belirtilerek isteğe bağlı bir parametre sağlanabilir.

Command ve CommandParameter özellikleri, aşağıdaki görüntüde gösterildiği gibi( DataBindings) altında Özellikler penceresi aracılığıyla tasarımcıda ayarlanır.

Windows Forms Düğmesinin Command ve CommandParameter özelliklerini vurgulayan Visual Studio özellikleri penceresi.

Düğmeler de olayı dinler ICommand.CanExecuteChanged ve bu da denetimin yöntemini sorgulamasına ICommand.CanExecute neden olur. Bu yöntem döndürdüğünde true, denetim etkinleştirilir; döndürüldüğünde falsedenetim devre dışı bırakılır.

Visual Studio DPI geliştirmeleri

Visual Studio 2022 17.8 DPI'nin farkında olmayan tasarımcı sekmelerini tanıtır. Daha önce, Visual Studio'daki Windows Tasarımcısı sekmesi Visual Studio'nun DPI'sinde çalışıyordu. Bu, DPI'nın farkında olmayan bir Windows Forms uygulaması tasarlarken sorunlara neden olur. Artık tasarımcının DPI kullanan veya olmayan uygulamanın çalışmasını istediğiniz ölçekte çalıştığından emin olabilirsiniz. Bu özellik kullanılmadan önce Visual Studio'yu DPI'sız bir modda çalıştırmanız gerekiyordu ve bu da Windows'da ölçeklendirme uygulandığında Visual Studio'nun kendisini bulanıklaştırdı. Artık Visual Studio'yu yalnız bırakabilir ve tasarımcının DPI-unaware çalıştırmasını sağlayabilirsiniz.

Proje dosyasına ekleyerek <ForceDesignerDPIUnaware> ve değerini trueolarak ayarlayarak Windows Forms projesi için DPI-unaware tasarımcısını etkinleştirebilirsiniz.

<PropertyGroup>
  <OutputType>WinExe</OutputType>
  <TargetFramework>net8.0-windows</TargetFramework>
  <Nullable>enable</Nullable>
  <UseWindowsForms>true</UseWindowsForms>
  <ImplicitUsings>enable</ImplicitUsings>
  <ForceDesignerDPIUnaware>true</ForceDesignerDPIUnaware>
  <ApplicationHighDpiMode>DpiUnawareGdiScaled</ApplicationHighDpiMode>
</PropertyGroup>

Önemli

Visual Studio bu ayarı proje yüklendiğinde okur, değiştirildiğinde okumaz. Bu ayarı değiştirdikten sonra Visual Studio'ya saygı duyması için projenizi kaldırın ve yeniden yükleyin.

Yüksek DPI geliştirmeleri

ile PerMonitorV2 yüksek DPI işleme geliştirildi:

  • İç içe denetimleri doğru ölçeklendirin. Örneğin, sekme sayfasına yerleştirilen paneldeki bir düğme.

  • Geçerli monitör DPI ayarlarına göre ölçeklendirme Form.MaximumSize ve Form.MinimumSize özellikler.

    .NET 8'den başlayarak, bu özellik varsayılan olarak etkindir ve önceki davranışa geri dönmek için bu özelliği geri çevirmeniz gerekir.

    Özelliği devre dışı bırakmak için runtimeconfig.json ayarına configProperties ekleyin System.Windows.Forms.ScaleTopLevelFormMinMaxSizeForDpi ve değeri false olarak ayarlayın:

    {
      "runtimeOptions": {
        "tfm": "net8.0",
        "frameworks": [
            ...
        ],
        "configProperties": {
          "System.Windows.Forms.ScaleTopLevelFormMinMaxSizeForDpi": false,
        }
      }
    }
    

Çeşitli geliştirmeler

Diğer bazı önemli değişiklikler şunlardır:

  • İşlenen FolderBrowserDialog kod geliştirildi ve birkaç bellek sızıntısı düzeltildi.
  • Windows Forms için kod tabanı yavaş yavaş C# null atanabilirliğini etkinleştirerek olası null başvuru hatalarının kökünü oluşturuyordu.
  • Kaynak System.Drawing kod Windows Forms GitHub deposuna geçirildi.
  • Modern Windows simgelerine yeni bir API () System.Drawing.SystemIcons.GetStockIcontarafından erişilebilir. Numaralandırma tüm System.Drawing.StockIconId kullanılabilir sistem simgelerini listeler.
  • Şu anda çalışma zamanında daha fazla tasarımcı kullanılabilir. Daha fazla bilgi için bkz . GitHub sorunu #4908.