Windows Presentation Foundation 및 Windows Forms 상호 운용에서 지원되는 시나리오
업데이트: 2007년 11월
WPF 및 Windows Forms에서는 응용 프로그램 인터페이스를 만들기 위한 두 가지 서로 다른 아키텍처를 제공합니다. System.Windows.Forms.Integration 네임스페이스는 일반적인 상호 운영 시나리오를 위한 클래스를 제공합니다. 상호 운영 기능을 구현하는 두 가지 주요 클래스는 WindowsFormsHost 및 ElementHost입니다. 이 항목에서는 지원되는 상호 운영 시나리오 및 지원되지 않는 상호 운영 시나리오에 대해 설명합니다.
참고
혼합 컨트롤 시나리오에는 특별한 주의가 필요합니다. 혼합 컨트롤에서는 한 기술의 컨트롤이 다른 기술의 컨트롤에 중첩되어 있습니다. 이를 중첩된 상호 운영이라고 부릅니다. 여러 수준 혼합 컨트롤에는 두 수준 이상의 혼합 컨트롤 중첩이 있습니다. 여러 수준의 중첩된 상호 운영에 대한 예는 다른 Windows Forms 컨트롤이 포함된 Windows Forms 컨트롤이 있는 WPF 컨트롤입니다. 여러 수준 혼합 컨트롤은 지원되지 않습니다.
이 항목에는 다음 단원이 포함되어 있습니다.
- Windows Presentation Foundation 기반의 응용 프로그램 호스팅 Windows Forms 컨트롤
- Windows Forms 기반의 응용 프로그램 호스팅 Windows Presentation Foundation 컨트롤
- 관련 항목
Windows Presentation Foundation 기반의 응용 프로그램 호스팅 Windows Forms 컨트롤
WPF 컨트롤에서 Windows Forms 컨트롤을 호스팅하는 경우 다음과 같은 상호 운영 시나리오가 지원됩니다.
XAML을 사용하여 WPF 컨트롤에서 하나 이상의 Windows Forms 컨트롤을 호스팅할 수 있습니다.
코드를 사용하여 WPF 컨트롤에서 하나 이상의 Windows Forms 컨트롤을 호스팅할 수 있습니다.
WPF 컨트롤에서 다른 Windows Forms 컨트롤이 포함된 Windows Forms 컨테이너 컨트롤을 호스팅할 수 있습니다.
WPF 컨트롤에서 WPF 마스터 및 Windows Forms 세부를 사용하는 마스터/세부 폼을 호스팅할 수 있습니다.
WPF 컨트롤에서 Windows Forms 마스터 및 WPF 세부를 사용하는 마스터/세부 폼을 호스팅할 수 있습니다.
WPF 컨트롤에서 하나 이상의 ActiveX 컨트롤을 호스팅할 수 있습니다.
WPF 컨트롤이 하나 이상의 복합 컨트롤을 호스팅할 수 있습니다.
XAML(Extensible Application Markup Language)을 사용하여 WPF 컨트롤에서 혼합 컨트롤을 호스팅할 수 있습니다.
코드를 사용하여 WPF 컨트롤에서 혼합 컨트롤을 호스팅할 수 있습니다.
레이아웃 지원
다음 목록에서는 WindowsFormsHost 요소가 해당 호스팅된 Windows Forms 컨트롤을 WPF 레이아웃 시스템으로 통합하려고 할 때 알려진 제한 사항에 대해 설명합니다.
Windows Forms 컨트롤의 크기를 조정할 수 없거나 특정 치수로만 크기를 조정할 수 있는 경우가 있습니다. 예를 들어 Windows FormsComboBox 컨트롤은 컨트롤의 글꼴 크기에 의해 정의되는 단일 높이만 지원합니다. 요소를 세로로 확장할 수 있다고 가정하는 WPF 동적 레이아웃에서는 호스팅된 ComboBox 컨트롤이 예상한 대로 확장되지 않습니다.
Windows Forms 컨트롤을 회전하거나 기울일 수 없습니다. 예를 들어 사용자 인터페이스를 90도 회전하는 경우 호스팅된 Windows Forms 컨트롤은 수직 위치를 유지합니다.
대부분의 경우 Windows Forms 컨트롤에서는 비율 크기 조정을 지원하지 않습니다. 컨트롤의 전체 치수의 크기가 조정되어도 컨트롤의 자식 컨트롤 및 구성 요소 크기는 예상한 대로 조정되지 않습니다. 이러한 제한은 각 Windows Forms 컨트롤이 크기 조정을 얼마나 잘 지원하는지에 따라 다릅니다.
WPF 사용자 인터페이스에서 요소의 Z 순서를 변경하여 겹치기 동작을 제어할 수 있습니다. 호스팅된 Windows Forms 컨트롤은 항상 WPF 요소 위에서 그려지므로 개별 HWND에서 그려집니다.
Windows Forms 컨트롤은 글꼴 크기를 기반으로 하는 자동 크기 조정을 지원합니다. WPF 사용자 인터페이스에서는 개별 요소의 크기가 동적으로 조정될 수 있어도 글꼴 크기를 조정할 때 전체 레이아웃의 크기가 조정되지 않습니다.
앰비언트 속성
WPF 컨트롤의 일부 앰비언트 속성에는 이에 해당하는 Windows Forms 앰비언트 속성이 있습니다. 이러한 앰비언트 속성은 호스팅된 Windows Forms 컨트롤로 전파되고 WindowsFormsHost 컨트롤의 공용 속성으로 노출됩니다. WindowsFormsHost 컨트롤은 각 WPF 앰비언트 속성을 이에 해당하는 Windows Forms 앰비언트 속성으로 변환합니다.
자세한 내용은 Windows Forms 및 WPF 속성 매핑을 참조하십시오.
동작
다음 표에서는 상호 운용 동작에 대해 설명합니다.
동작 |
지원됨 |
지원 안 함 |
---|---|---|
투명도 |
Windows Forms 컨트롤 렌더링에서는 투명도를 지원합니다. 부모 WPF 컨트롤의 배경은 호스팅된 Windows Forms 컨트롤의 배경이 될 수 있습니다. |
일부 Windows Forms 컨트롤은 투명도를 지원하지 않습니다. 예를 들어 TextBox 및 ComboBox 컨트롤은 WPF에 의해 호스팅될 때 투명하지 않습니다. |
탭 |
호스팅된 Windows Forms 컨트롤의 탭 순서는 이러한 컨트롤이 Windows Forms 기반 응용 프로그램에서 호스팅되는 경우의 탭 순서와 같습니다. WPF 컨트롤에서 Windows Forms 컨트롤로의 탭은 일반적인 경우와 같이 Tab 키와 Shift+Tab을 사용하여 작동합니다. TabStop 속성 값이 false인 Windows Forms 컨트롤은 사용자가 컨트롤 사이에서 탭 작업을 수행할 때 포커스를 받지 않습니다.
|
적용할 수 없음. |
화살표 키를 사용하여 탐색 |
|
적용할 수 없음. |
액셀러레이터 |
액셀러레이터는 "지원 안 함" 열에 명시된 경우를 제외하고 평소대로 작동합니다. |
기술 간에 중복된 액셀러레이터는 일반적인 중복된 액셀러레이터와 같이 작동하지 않습니다. 액셀러레이터가 기술 간에 중복되는 경우, 즉 Windows Forms 컨트롤에 하나 이상이, WPF 컨트롤에 다른 하나가 있는 경우 Windows Forms 컨트롤은 항상 액셀러레이터를 받습니다. 중복된 액셀러레이터를 누를 때 컨트롤 사이에 포커스가 전환되지 않습니다. |
바로 가기 키 |
액셀러레이터 키는 "지원 안 함" 열에 명시된 경우를 제외하고 평소대로 작동합니다. |
|
AcceptsReturn, AcceptsTab 및 기타 컨트롤 관련 동작 |
Windows Forms 컨트롤이 IsInputKey 메서드를 재정의하여 true를 반환한다는 가정하에서 기본 키보드 동작을 변경하는 속성은 평소대로 작동합니다. |
KeyDown 이벤트를 처리하여 기본 키보드 동작을 변경하는 Windows Forms 컨트롤은 호스트 WPF 컨트롤에서 마지막으로 처리됩니다. 이러한 컨트롤은 마지막으로 처리되기 때문에 예상치 못한 동작을 발생시킬 수 있습니다. |
시작 및 종료 이벤트 |
포함하는 ElementHost 컨트롤에 포커스가 지정되지 않는 경우 단일 WindowsFormsHost 컨트롤에서 포커스가 변경되는 경우 시작 및 종료 이벤트가 평소대로 발생합니다. |
다음과 같이 포커스가 변경되는 경우에는 시작 및 종료 이벤트가 발생하지 않습니다.
|
다중 스레딩 |
모든 형태의 다중 스레딩이 지원됩니다. |
Windows Forms 기술과 WPF 기술 모두 단일 스레드 동시성 모델을 사용합니다. 디버깅 동안 다른 스레드에서 프레임워크 개체로 호출하면 예외가 발생하여 이 요구 사항이 강제 적용됩니다. |
보안 |
모든 상호 운용 시나리오에서는 완전 신뢰가 필요합니다. |
부분 신뢰에서는 상호 운용 시나리오를 사용할 수 없습니다. |
내게 필요한 옵션 |
모든 내게 필요한 옵션 시나리오가 지원됩니다. 보조 기술 제품 기능은 Windows Forms 컨트롤과 WPF 컨트롤을 모두 포함하는 혼합 응용 프로그램에 사용되는 경우 제대로 작동합니다. |
적용할 수 없음. |
클립보드 |
모든 클립보드 작업은 평소대로 작동합니다. 이러한 작업에는 Windows Forms 컨트롤과 WPF 컨트롤 사이에서의 잘라내기 및 붙여넣기 작업이 포함됩니다. |
적용할 수 없음. |
끌어서 놓기 기능 |
모든 끌어서 놓기 작업은 평소대로 작동합니다. 이 작업에는 Windows Forms 컨트롤과 WPF 컨트롤 사이의 작업이 포함됩니다. |
적용할 수 없음. |
Windows Forms 기반의 응용 프로그램 호스팅 Windows Presentation Foundation 컨트롤
Windows Forms 컨트롤에서 WPF 컨트롤을 호스팅하는 경우 다음과 같은 상호 운영 시나리오가 지원됩니다.:
코드를 사용하여 하나 이상의 WPF 컨트롤 호스팅
하나 이상의 호스팅된 WPF 컨트롤에 속성 시트 연결
폼에서 하나 이상의 WPF 페이지 호스팅
WPF 창 시작
Windows Forms 마스터 및 WPF 세부를 사용하는 마스터/세부 폼 호스팅
WPF 마스터 및 Windows Forms 세부를 사용하는 마스터/세부 폼 호스팅
사용자 지정 WPF 컨트롤 호스팅
혼합 컨트롤 호스팅
앰비언트 속성
Windows Forms 컨트롤의 일부 앰비언트 속성에는 이에 해당하는 WPF 앰비언트 속성이 있습니다. 이러한 앰비언트 속성은 호스팅된 WPF 컨트롤로 전파되고 ElementHost 컨트롤의 공용 속성으로 노출됩니다. ElementHost 컨트롤은 각 Windows Forms 앰비언트 속성을 이에 해당하는 WPF 앰비언트 속성으로 변환합니다.
자세한 내용은 Windows Forms 및 WPF 속성 매핑을 참조하십시오.
동작
다음 표에서는 상호 운용 동작에 대해 설명합니다.
동작 |
지원됨 |
지원 안 함 |
---|---|---|
투명도 |
WPF 컨트롤 렌더링에서는 투명도를 지원합니다. 부모 Windows Forms 컨트롤의 배경은 호스팅된 WPF 컨트롤의 배경이 될 수 있습니다. |
적용할 수 없음. |
다중 스레딩 |
모든 형태의 다중 스레딩이 지원됩니다. |
Windows Forms 기술과 WPF 기술 모두 단일 스레드 동시성 모델을 사용합니다. 디버깅 동안 다른 스레드에서 프레임워크 개체로 호출하면 예외가 발생하여 이 요구 사항이 강제 적용됩니다. |
보안 |
모든 상호 운용 시나리오에서는 완전 신뢰가 필요합니다. |
부분 신뢰에서는 상호 운용 시나리오를 사용할 수 없습니다. |
내게 필요한 옵션 |
모든 내게 필요한 옵션 시나리오가 지원됩니다. 보조 기술 제품 기능은 Windows Forms 컨트롤과 WPF 컨트롤을 모두 포함하는 혼합 응용 프로그램에 사용되는 경우 제대로 작동합니다. |
적용할 수 없음. |
클립보드 |
모든 클립보드 작업은 평소대로 작동합니다. 이러한 작업에는 Windows Forms 컨트롤과 WPF 컨트롤 사이에서의 잘라내기 및 붙여넣기 작업이 포함됩니다. |
적용할 수 없음. |
끌어서 놓기 기능 |
모든 끌어서 놓기 작업은 평소대로 작동합니다. 이 작업에는 Windows Forms 컨트롤과 WPF 컨트롤 사이의 작업이 포함됩니다. |
적용할 수 없음. |
참고 항목
개념
연습: Windows Presentation Foundation에서 Windows Forms 합성 컨트롤 호스팅
연습: Windows Forms에서 Windows Presentation Foundation 컨트롤 호스팅