.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ınaPerMonitorV2
gö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ın
configProperties
:{ "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:
Ekran okuyucularda gözlemlenen duyuruyla ilgili birçok sorun giderildi ve denetimler hakkındaki bilgilerin doğru olduğundan emin olundu. Örneğin, ListView artık bir grup genişletildiğinde veya daraltıldığında doğru şekilde duyurur.
Daha fazla denetim artık UI Otomasyonu desteği sağlar:
Windows Forms uygulamasını Ekran Okuyucusu gibi yardımcı araçlar altında çalıştırmayla ilgili bellek sızıntıları düzeltildi.
Yardımcı araçlar artık odak göstergelerini doğru çizer ve iç içe formlar ve bileşik denetimlerin , ListViewve TabControlgibi DataGridViewbazı öğeleri için doğru sınırlayıcı dikdörtgenleri rapor eder.
Otomasyon UI ExpandCollapse Denetim Düzeni , TreeViewve denetimlerinde ListViewdüzgün şekilde uygulanmıştır ve PropertyGrid yalnızca genişletilebilir öğeler için etkinleştirilir.
Denetimlerde çeşitli renk karşıtlığı oranı düzeltmeleri.
Yüksek karşıtlıklı temalarda ve ToolStripButton için görünürlük iyileştirmeleriToolStripTextBox.
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.
.NET Desktop feedback