.NET용 Windows Forms 8의 새로운 기능
이 문서에서는 .NET 8의 새로운 Windows Forms 기능 및 향상된 기능을 설명합니다.
.NET Framework에서 .NET 8로 마이그레이션할 때 알아야 할 몇 가지 호환성이 손상되는 변경이 있습니다. 자세한 내용은 Windows Forms의 호환성이 손상되는 변경을 참조하세요.
데이터 바인딩 개선 사항
새 데이터 바인딩 엔진은 .NET 7에서 미리 보기로 제공되었고, 이제 .NET 8에서 완전하게 사용할 수 있습니다. 이 새 엔진은 기존 Windows Forms 데이터 바인딩 엔진만큼 광범위하지는 않지만, WPF를 기준으로 모델링되어 MVVM 디자인 원칙을 더 쉽게 구현할 수 있습니다.
향상된 데이터 바인딩 기능 덕분에 MVVM 패턴을 완전하게 활용하고 Windows Forms의 ViewModels에서 개체 관계형 매퍼를 사용하기가 더 쉬워졌습니다. 이로써 코드 숨김 파일의 코드 양이 줄어듭니다. 더 중요하게는 WPF, UWP/WinUI 및 MAUI와 같은 다른 .NET GUI 프레임워크와 Windows Forms 간에 코드를 공유할 수 있습니다. 앞에서 언급한 GUI 프레임워크는 XAML을 UI 기술로 사용하지만 Windows Forms에는 XAML이 제공되지 않는다는 점에 유의해야 합니다.
IBindableComponent 인터페이스와 BindableComponent 클래스는 새 바인딩 시스템을 구동합니다. Control은 인터페이스를 구현하고 Windows Forms에 새로운 데이터 바인딩 기능을 제공합니다.
단추 명령
단추 명령은 .NET 7에서 미리 보기로 제공되었고, 이제 .NET 8에서 완전하게 사용할 수 있습니다. WPF와 마찬가지로 ICommand 인터페이스를 구현하는 개체의 인스턴스를 단추의 Command 속성에 할당할 수 있습니다. 단추를 클릭하면 명령이 호출됩니다.
명령이 호출될 때 단추의 CommandParameter 속성 값을 지정하여 선택적 매개 변수를 제공할 수 있습니다.
Command
및 CommandParameter
속성은 다음 이미지와 같이 (DataBindings) 아래의 속성 창을 통해 디자이너에서 설정됩니다.
또한 단추는 ICommand.CanExecuteChanged 이벤트를 수신 대기하며, 컨트롤이 ICommand.CanExecute 메서드를 쿼리하도록 만듭니다. 해당 메서드가 true
를 반환하면 컨트롤이 활성화되고, false
를 반환하면 컨트롤이 비활성화됩니다.
Visual Studio DPI 개선 사항
Visual Studio 2022 17.8에는 DPI를 인식하지 않는 디자이너 탭이 도입되었습니다. 이전에는 Visual Studio의 Windows 디자이너 탭이 Visual Studio의 DPI에서 실행되었습니다. 그 결과 DPI를 인식하지 않는 Windows Forms 앱을 디자인할 때는 문제가 발생합니다. 이제 DPI 인식 여부와 관계없이 앱을 실행하려 할 때와 동일한 규모로 디자이너가 실행되게 할 수 있습니다. 이 기능이 도입되기 전에는 DPI를 인식하지 않는 모드에서 Visual Studio를 실행해야 했기 때문에 Windows에서 크기 조정이 적용되면 Visual Studio 자체가 흐려졌습니다. 이제 Visual Studio는 그대로 둔 채 DPI를 인식하지 않는 디자이너를 실행할 수 있습니다.
프로젝트 파일에 <ForceDesignerDPIUnaware>
를 추가하고 값을 true
로 설정하여 Windows Forms 프로젝트에 DPI를 인식하지 않는 디자이너를 사용할 수 있습니다.
<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>
Important
Visual Studio는 프로젝트가 로드될 때 이 설정을 읽으며, 변경될 때는 읽지 않습니다. 이 설정을 변경한 후 프로젝트를 언로드하고 다시 로드하여 Visual Studio가 해당 설정을 준수하게 합니다.
높은 DPI 개선 사항
PerMonitorV2를 사용하는 높은 DPI 렌더링이 향상되었습니다.
중첩된 컨트롤의 크기를 올바르게 조정합니다. 예를 들어 탭 페이지에 배치된 패널에 있는 버튼입니다.
현재 모니터 DPI 설정에 따라 Form.MaximumSize 및 Form.MinimumSize 속성을 스케일링합니다.
.NET 8부터 이 기능은 기본적으로 사용하도록 설정되며 이전 동작을 되돌리기 위해 옵트아웃해야 합니다.
이 기능을 사용하지 않으려면
configProperties
에서 설정에 를 추가하고 값을 false로 설정합니다.{ "runtimeOptions": { "tfm": "net8.0", "frameworks": [ ... ], "configProperties": { "System.Windows.Forms.ScaleTopLevelFormMinMaxSizeForDpi": false, } } }
기타 개선 사항
다음은 몇 가지 주목할 만한 변경 사항입니다.
-
FolderBrowserDialog
를 처리하는 코드가 개선되어 몇 가지 메모리 누수 문제를 해결했습니다. - Windows Forms의 코드 베이스는 C# null 허용 여부를 천천히 활성화하여 잠재적인 null 참조 오류를 근절했습니다.
-
System.Drawing
소스 코드가 Windows Forms GitHub 리포지토리로 마이그레이션되었습니다. - 최신 Windows 아이콘에 새 API System.Drawing.SystemIcons.GetStockIcon으로 액세스할 수 있습니다. System.Drawing.StockIconId 열거형에 사용 가능한 모든 시스템 아이콘이 나열됩니다.
- 이제 런타임에 더 많은 디자이너를 사용할 수 있습니다. 자세한 내용은 GitHub 문제 #4908을 참조하세요.
.NET Desktop feedback