Apa yang baru untuk .NET 7 (Formulir Windows .NET)
Artikel ini menjelaskan beberapa fitur dan penyempurnaan Formulir Windows baru di .NET 7.
Ada beberapa perubahan yang melanggar yang harus Anda waspadai saat bermigrasi dari .NET Framework ke .NET 7. Untuk informasi selengkapnya, lihat Melanggar perubahan di Formulir Windows.
Peningkatan DPI tinggi
Penyajian DPI tinggi dengan PerMonitorV2 telah ditingkatkan:
Menskalakan kontrol berlapis dengan benar. Misalnya, tombol yang ada di panel, yang ditempatkan di halaman tab.
Skala Form.MaximumSize dan Form.MinimumSize properti berdasarkan pengaturan DPI monitor saat ini untuk aplikasi yang berjalan
ApplicationHighDpiMode
diatur kePerMonitorV2
.Di .NET 7, fitur ini dinonaktifkan secara default dan Anda harus memilih untuk menerima perubahan ini. Dimulai dengan .NET 8, fitur ini diaktifkan secara default dan Anda perlu menolaknya untuk kembali ke perilaku sebelumnya.
Untuk mengaktifkan fitur, atur
configProperties
pengaturan di runtimeconfig.json:{ "runtimeOptions": { "tfm": "net7.0", "frameworks": [ ... ], "configProperties": { "System.Windows.Forms.ScaleTopLevelFormMinMaxSizeForDpi": true, } } }
Peningkatan dan perbaikan aksesibilitas
Rilis ini menambahkan peningkatan lebih lanjut pada aksesibilitas, termasuk tetapi tidak terbatas pada item berikut:
Banyak masalah terkait pengumuman yang diamati dalam pembaca layar telah diatasi, memastikan informasi tentang kontrol sudah benar. Misalnya, ListView sekarang mengumumkan dengan benar ketika grup diperluas atau diciutkan.
Kontrol lainnya sekarang menyediakan dukungan Automation UI:
Kebocoran memori yang terkait dengan menjalankan aplikasi Formulir Windows di bawah alat bantu, seperti Narator, telah diperbaiki.
Alat bantuan sekarang secara akurat menarik indikator fokus dan melaporkan persegi panjang pembatas yang benar untuk bentuk berlapis dan beberapa elemen kontrol komposit, seperti DataGridView, ListView, dan TabControl.
Pola Kontrol ExpandCollapse Antarmuka Pengguna Automation telah diimplementasikan dengan benar dalam ListViewkontrol , , TreeViewdan PropertyGrid , dan hanya diaktifkan untuk item yang dapat diperluas.
Berbagai koreksi rasio kontras warna dalam kontrol.
Peningkatan visibilitas untuk ToolStripTextBox dan ToolStripButton dalam tema kontras tinggi.
Peningkatan pengikatan data (pratinjau)
Sementara Formulir Windows sudah memiliki mesin pengikatan yang kuat, bentuk pengikatan data yang lebih modern, mirip dengan pengikatan data yang disediakan oleh WPF, sedang diperkenalkan.
Fitur pengikatan data baru memungkinkan Anda untuk sepenuhnya merangkul pola MVVM dan penggunaan pemeta relasional objek dari ViewModels di Formulir Windows lebih mudah daripada sebelumnya. Ini, pada gilirannya, memungkinkan untuk mengurangi kode dalam file code-behind, dan membuka kemungkinan pengujian baru. Yang lebih penting, ini memungkinkan berbagi kode antara Formulir Windows dan kerangka kerja GUI .NET lainnya seperti WPF, UWP/WinUI, dan .NET MAUI. Dan untuk mengklarifikasi pertanyaan yang umum diajukan, tidak ada rencana untuk memperkenalkan XAML dalam Formulir Windows.
Fitur pengikatan data baru ini dalam pratinjau untuk .NET 7, dan lebih banyak pekerjaan pada fitur ini akan terjadi di .NET 8.
Untuk mengaktifkan pengikatan baru, tambahkan pengaturan ke EnablePreviewFeatures
file proyek Anda. Ini didukung di C# dan Visual Basic.
<Project Sdk="Microsoft.NET.Sdk">
<!-- other settings -->
<PropertyGroup>
<EnablePreviewFeatures>true</EnablePreviewFeatures>
</PropertyGroup>
</Project>
Cuplikan kode berikut menunjukkan properti, peristiwa, dan metode baru yang ditambahkan ke berbagai kelas di Formulir Windows. Meskipun contoh kode berikut ada di C#, contoh kode ini juga berlaku untuk Visual Basic.
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);
}
Perbaikan lain-lain
Berikut adalah beberapa perubahan penting lainnya:
- Penanganan seret dan letakkan cocok dengan fungsionalitas seret dan letakkan Windows dengan efek tampilan yang lebih kaya seperti ikon dan label teks.
- Dialog folder dan file memungkinkan opsi lainnya:
- Tambahkan ke baru-baru ini
- Periksa akses tulis
- Mode diperluas
- OK memerlukan interaksi
- Pilih baca-saja
- Perlihatkan file tersembunyi
- Perlihatkan tempat yang disematkan
- Perlihatkan pratinjau
- ErrorProvider memiliki HasErrors properti sekarang.
- Tata letak snap formulir diperbaiki untuk Windows 11.
Baca juga
.NET Desktop feedback