Aracılığıyla paylaş


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

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

.NET Framework'ten .NET 7'ye 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.

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.

  • olarak ayarlanan uygulamalar ApplicationHighDpiMode için geçerli monitör DPI ayarlarına PerMonitorV2göre ölçeklendirin Form.MaximumSize ve Form.MinimumSize özellikler.

    .NET 7'de bu özellik varsayılan olarak devre dışıdır ve bu değişikliği almayı kabul etmeniz gerekir. .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 etkinleştirmek için runtimeconfig.json dosyasındaki ayarı ayarlayınconfigProperties:

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

Erişilebilirlik iyileştirmeleri ve düzeltmeleri

Bu sürüm, aşağıdaki öğeler dahil ancak bunlarla sınırlı olmamak üzere erişilebilirlikle ilgili daha fazla geliştirme ekler:

Veri bağlama geliştirmeleri (önizleme)

Windows Forms zaten güçlü bir bağlama altyapısına sahip olsa da WPF tarafından sağlanan veri bağlamaya benzer şekilde daha modern bir veri bağlama biçimi kullanıma sunulmuştur.

Yeni veri bağlama özellikleri, MVVM desenini tam olarak benimsemenizi ve Windows Forms'da ViewModel'lerden nesne ilişkisel eşleyicilerin kullanımını öncekinden daha kolay hale getirebilirsiniz. Bu da arka planda kod dosyalarının kodunu azaltmayı mümkün kılar ve yeni test olasılıkları açar. 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. Yaygın olarak sorulan bir soruyu netleştirmek için Windows Forms'da XAML'yi tanıtma planı yoktur.

Bu yeni veri bağlama özellikleri .NET 7 için önizleme aşamasındadır ve bu özellik üzerinde daha fazla çalışma .NET 8'de gerçekleşir.

Yeni bağlamayı etkinleştirmek için, ayarı proje dosyanıza ekleyin EnablePreviewFeatures . Bu, hem C# hem de Visual Basic'te desteklenir.

<Project Sdk="Microsoft.NET.Sdk">

  <!-- other settings -->

  <PropertyGroup>
    <EnablePreviewFeatures>true</EnablePreviewFeatures>
  </PropertyGroup>

</Project>

Aşağıdaki kod parçacığı, Windows Forms'daki çeşitli sınıflara eklenen yeni özellikleri, olayları ve yöntemleri gösterir. Aşağıdaki kod örneği C# dilinde olsa da Visual Basic için de geçerlidir.

public class Control  {
    [BindableAttribute(true)]
    public virtual object DataContext { get; set; }
    [BrowsableAttribute(true)]
    public event EventHandler DataContextChanged;
    protected virtual void OnDataContextChanged(EventArgs e);
    protected virtual void OnParentDataContextChanged(EventArgs e);
}

[RequiresPreviewFeaturesAttribute]
public abstract class BindableComponent : Component, IBindableComponent, IComponent, IDisposable {
    protected BindableComponent();
    public BindingContext? BindingContext { get; set; }
    public ControlBindingsCollection DataBindings { get; }
    public event EventHandler BindingContextChanged;
    protected virtual void OnBindingContextChanged(EventArgs e);
}

public abstract class ButtonBase : Control {
    [BindableAttribute(true)]
    [RequiresPreviewFeaturesAttribute]
    public ICommand? Command { get; set; }
    [BindableAttribute(true)]
    public object? CommandParameter { [RequiresPreviewFeaturesAttribute] get; [RequiresPreviewFeaturesAttribute] set; }
    [RequiresPreviewFeaturesAttribute]
    public event EventHandler? CommandCanExecuteChanged;
    [RequiresPreviewFeaturesAttribute]
    public event EventHandler? CommandChanged;
    [RequiresPreviewFeaturesAttribute]
    public event EventHandler? CommandParameterChanged;
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnCommandCanExecuteChanged(EventArgs e);
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnCommandChanged(EventArgs e);
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnCommandParameterChanged(EventArgs e);
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnRequestCommandExecute(EventArgs e);
}

public abstract class ToolStripItem : BindableComponent, IComponent, IDisposable, IDropTarget {
    [BindableAttribute(true)]
    [RequiresPreviewFeaturesAttribute]
    public ICommand Command { get; set; }
    [BindableAttribute(true)]
    public object CommandParameter { [RequiresPreviewFeaturesAttribute] get; [RequiresPreviewFeaturesAttribute] set; }
    [RequiresPreviewFeaturesAttribute]
    public event EventHandler CommandCanExecuteChanged;
    [RequiresPreviewFeaturesAttribute]
    public event EventHandler CommandChanged;
    [RequiresPreviewFeaturesAttribute]
    public event EventHandler CommandParameterChanged;
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnCommandCanExecuteChanged(EventArgs e);
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnCommandChanged(EventArgs e);
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnCommandParameterChanged(EventArgs e);
    [RequiresPreviewFeaturesAttribute]
    protected virtual void OnRequestCommandExecute(EventArgs e);
}

Çeşitli geliştirmeler

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

  • Sürükle ve bırak işleme, simgeler ve metin etiketleri gibi daha zengin görüntü efektleriyle Windows sürükle ve bırak işleviyle eşleşir.
  • Klasör ve dosya iletişim kutuları daha fazla seçenek sağlar:
    • Son kullanılanlara ekle
    • Yazma erişimini denetleme
    • Genişletilmiş mod
    • Tamam için etkileşim gerekir
    • Salt okunur seç
    • Gizli dosyaları göster
    • Sabitlenmiş yerleri göster
    • Önizlemeyi göster
  • ErrorProvider artık bir HasErrors özelliği var.
  • Formun tutturma düzeni Windows 11 için sabittir.

Ayrıca bkz.