Новые возможности Windows Forms для .NET 8
В этой статье описываются некоторые новые функции и усовершенствования Windows Forms в .NET 8.
При переходе с платформа .NET Framework на .NET 8 следует учитывать несколько критических изменений. Дополнительные сведения см. в разделе Критические изменения в Windows Forms.
Улучшения привязки данных
Новый модуль привязки данных был в предварительной версии с .NET 7 и теперь полностью включен в .NET 8. Хотя и не так широко, как существующий механизм привязки данных Windows Forms, этот новый механизм моделиируется после WPF, что упрощает реализацию принципов проектирования MVVM.
Расширенные возможности привязки данных упрощают использование шаблона MVVM и использования реляционных средств сопоставления объектов из ViewModels в Windows Forms. Это сокращает объем кода в файлах программной части. Кроме того, он обеспечивает общий доступ к коду между Windows Forms и другими платформами ГРАФИЧЕСКОго интерфейса .NET, такими как WPF, UWP/WinUI и .NET MAUI. Важно отметить, что в то время как ранее упомянутые платформы GUI используют XAML в качестве технологии пользовательского интерфейса, XAML не поступает в Windows Forms.
Интерфейс IBindableComponent и BindableComponent класс управляют новой системой привязки. Control реализует интерфейс и предоставляет новые возможности привязки данных к Windows Forms.
Команды кнопки
Команды кнопки были в предварительной версии с .NET 7 и теперь полностью включены в .NET 8. Аналогично WPF, экземпляр объекта, реализующего ICommand интерфейс, можно назначить свойству кнопки Command . При нажатии кнопки вызывается команда.
Необязательный параметр можно указать при вызове команды, указав значение для свойства кнопки CommandParameter .
Command
Свойства CommandParameter
задаются в конструкторе в окне "Свойства" в разделе (DataBindings), как показано на следующем рисунке.
Кнопки также прослушивают ICommand.CanExecuteChanged событие, что приводит к запросу метода элементом ICommand.CanExecute управления. Когда этот метод возвращается true
, элемент управления включен; элемент управления отключается при false
возвращении.
Улучшения DPI Visual Studio
Visual Studio 2022 17.8 Содержит вкладки конструктора, не знают от DPI. Ранее вкладка конструктора Windows в Visual Studio выполнялась в DPI Visual Studio. Это приводит к проблемам при разработке приложения Windows Forms, не известного от DPI. Теперь вы можете убедиться, что конструктор выполняется в том же масштабе, что и приложение, которое будет запускаться, или нет. Прежде чем эта функция появилась, необходимо было запустить Visual Studio в режиме, не известном от DPI, что сделало Visual Studio себя размытым при применении масштабирования в Windows. Теперь вы можете оставить Visual Studio в одиночку и позволить конструктору запускать DPI-не зная.
Вы можете включить неузнаемый конструктор DPI для проекта Windows Forms, добавив <ForceDesignerDPIUnaware>
в файл проекта и задав значение true
.
<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>
Внимание
Visual Studio считывает этот параметр при загрузке проекта, а не при изменении. После изменения этого параметра выгрузите и перезагрузите проект, чтобы получить Visual Studio для его уважения.
Улучшения высокого уровня DPI
Улучшена отрисовка PerMonitorV2 высокого уровня DPI:
Правильно масштабировать вложенные элементы управления. Например, кнопка, которая находится на панели, которая размещается на вкладке.
Масштабирование Form.MaximumSize и Form.MinimumSize свойства на основе текущих параметров DPI монитора.
Начиная с .NET 8 эта функция включена по умолчанию, и вы должны отказаться от нее, чтобы вернуться к предыдущему поведению.
Чтобы отключить функцию, добавьте
System.Windows.Forms.ScaleTopLevelFormMinMaxSizeForDpi
configProperties
в параметр в runtimeconfig.json и задайте значение false:{ "runtimeOptions": { "tfm": "net8.0", "frameworks": [ ... ], "configProperties": { "System.Windows.Forms.ScaleTopLevelFormMinMaxSizeForDpi": false, } } }
Прочие улучшения
Ниже приведены некоторые другие важные изменения:
- Код, который обрабатывался
FolderBrowserDialog
, был улучшен, исправляя несколько утечек памяти. - База кода для Windows Forms медленно включает пустую возможность C# и удаляет любые потенциальные ошибки со ссылкой на null.
- Исходный
System.Drawing
код был перенесен в репозиторий GitHub Windows Forms. - К современным значкам Windows можно получить доступ с помощью нового API. System.Drawing.SystemIcons.GetStockIcon Перечисление System.Drawing.StockIconId перечисляет все доступные системные значки.
- В настоящее время выполнения доступны дополнительные конструкторы. Дополнительные сведения см. в статье GitHub о проблеме 4908.
.NET Desktop feedback