Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описываются некоторые новые функции и усовершенствования Windows Forms в .NET 8.
При переходе с платформа .NET Framework на .NET 8 следует учитывать несколько критических изменений. Дополнительные сведения см. в разделе Критические изменения в Windows Forms.
Улучшения привязки данных
Новый модуль привязки данных был в предварительной версии с .NET 7 и теперь полностью включен в .NET 8. Хотя и не так широко, как существующий механизм привязки данных Windows Forms, этот новый механизм моделиируется после WPF, что упрощает реализацию принципов проектирования MVVM.
Расширенные возможности привязки данных упрощают использование шаблона MVVM и использования реляционных средств сопоставления объектов из ViewModels в Windows Forms. Это сокращает объем кода в файлах Code-Behind. Кроме того, он обеспечивает общий доступ к коду между 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. Теперь вы можете убедиться, что конструктор работает в том же масштабе, в котором вы хотите, чтобы приложение работало — с учётом разрешения 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
Отрисовка с высоким DPI с PerMonitorV2 улучшена.
Правильно масштабировать вложенные элементы управления. Например, кнопка, которая находится на панели, которая размещается на вкладке.
Масштабирование свойств 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 постепенно включает поддержку nullability в C# и исключает все возможные ошибки null-ссылок.
- Исходный
System.Drawing
код был перенесен в репозиторий GitHub Windows Forms. - К современным значкам Windows можно получить доступ с помощью нового API. System.Drawing.SystemIcons.GetStockIcon Перечисление System.Drawing.StockIconId перечисляет все доступные системные значки.
- В настоящее время выполнения доступны дополнительные конструкторы. Дополнительные сведения см. в статье GitHub о проблеме 4908.
.NET Desktop feedback