다음을 통해 공유


Windows Presentation Foundation 및 Windows Forms 상호 운용에서 지원되는 시나리오

업데이트: 2007년 11월

WPF 및 Windows Forms에서는 응용 프로그램 인터페이스를 만들기 위한 두 가지 서로 다른 아키텍처를 제공합니다. System.Windows.Forms.Integration 네임스페이스는 일반적인 상호 운영 시나리오를 위한 클래스를 제공합니다. 상호 운영 기능을 구현하는 두 가지 주요 클래스는 WindowsFormsHostElementHost입니다. 이 항목에서는 지원되는 상호 운영 시나리오 및 지원되지 않는 상호 운영 시나리오에 대해 설명합니다.

참고

혼합 컨트롤 시나리오에는 특별한 주의가 필요합니다. 혼합 컨트롤에서는 한 기술의 컨트롤이 다른 기술의 컨트롤에 중첩되어 있습니다. 이를 중첩된 상호 운영이라고 부릅니다. 여러 수준 혼합 컨트롤에는 두 수준 이상의 혼합 컨트롤 중첩이 있습니다. 여러 수준의 중첩된 상호 운영에 대한 예는 다른 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 컨트롤은 투명도를 지원하지 않습니다. 예를 들어 TextBoxComboBox 컨트롤은 WPF에 의해 호스팅될 때 투명하지 않습니다.

호스팅된 Windows Forms 컨트롤의 탭 순서는 이러한 컨트롤이 Windows Forms 기반 응용 프로그램에서 호스팅되는 경우의 탭 순서와 같습니다.

WPF 컨트롤에서 Windows Forms 컨트롤로의 탭은 일반적인 경우와 같이 Tab 키와 Shift+Tab을 사용하여 작동합니다.

TabStop 속성 값이 false인 Windows Forms 컨트롤은 사용자가 컨트롤 사이에서 탭 작업을 수행할 때 포커스를 받지 않습니다.

  • WindowsFormsHost 컨트롤에는 TabIndex 값이 있습니다. 이 값은 WindowsFormsHost 컨트롤에서 포커스를 받는 경우를 결정합니다.

  • WindowsFormsHost 컨테이너 내에 포함된 Windows Forms 컨트롤은 TabIndex 속성에서 지정하는 순서를 따릅니다. 마지막 탭 인덱스에서 탭을 사용하면 다음 WPF 컨트롤(하나라도 있는 경우)이 포커스를 받습니다. 포커스를 받을 수 있는 WPF 컨트롤이 없으면 탭 순서의 첫 번째 Windows Forms 컨트롤로 탭이 되돌아갑니다.

  • WindowsFormsHost 내에 있는 컨트롤의 TabIndex 값은 WindowsFormsHost 컨트롤에 포함된 형제 Windows Forms 컨트롤에 상대적입니다.

  • 탭은 컨트롤 관련 동작의 영향을 받습니다. 예를 들어 AcceptsTab 속성 값이 true인 TextBox 컨트롤에서 Tab 키를 누르면 포커스를 이동하는 대신 텍스트 상자에 탭이 입력됩니다.

적용할 수 없음.

화살표 키를 사용하여 탐색

  • WindowsFormsHost 컨트롤에서 화살표 키를 사용하여 탐색하는 작업은 일반적인 Windows Forms 컨테이너 컨트롤에서 화살표 키를 사용하여 탐색하는 작업과 동일합니다. 위쪽 화살표 및 왼쪽 화살표 키는 이전 컨트롤을 선택하고 아래쪽 화살표 및 오른쪽 화살표 키는 다음 컨트롤을 선택합니다.

  • WindowsFormsHost 컨트롤에 포함되어 있는 첫 번째 컨트롤의 위쪽 화살표 및 왼쪽 화살표 키는 Shift+Tab 바로 가기 키와 동일한 동작을 수행합니다. 포커스를 받을 수 있는 WPF 컨트롤이 있는 경우 포커스는 WindowsFormsHost 컨트롤 외부로 이동합니다. 이러한 동작은 마지막 컨트롤로의 래핑이 발생하지 않는다는 점에서 표준 ContainerControl 동작과 다릅니다. 포커스를 받을 수 있는 다른 WPF 컨트롤이 없으면 포커스가 탭 순서의 마지막 Windows Forms 컨트롤로 되돌아갑니다.

  • WindowsFormsHost 컨트롤에 포함되어 있는 마지막 컨트롤의 아래쪽 화살표 및 오른쪽 화살표 키는 Tab 키와 동일한 동작을 수행합니다. 포커스를 받을 수 있는 WPF 컨트롤이 있는 경우 포커스는 WindowsFormsHost 컨트롤 외부로 이동합니다. 이러한 동작은 첫 번째 컨트롤로의 래핑이 발생하지 않는다는 점에서 표준 ContainerControl 동작과 다릅니다. 포커스를 받을 수 있는 WPF 컨트롤이 없으면 포커스가 탭 순서의 첫 번째 Windows Forms 컨트롤로 되돌아갑니다.

적용할 수 없음.

액셀러레이터

액셀러레이터는 "지원 안 함" 열에 명시된 경우를 제외하고 평소대로 작동합니다.

기술 간에 중복된 액셀러레이터는 일반적인 중복된 액셀러레이터와 같이 작동하지 않습니다. 액셀러레이터가 기술 간에 중복되는 경우, 즉 Windows Forms 컨트롤에 하나 이상이, WPF 컨트롤에 다른 하나가 있는 경우 Windows Forms 컨트롤은 항상 액셀러레이터를 받습니다. 중복된 액셀러레이터를 누를 때 컨트롤 사이에 포커스가 전환되지 않습니다.

바로 가기 키

액셀러레이터 키는 "지원 안 함" 열에 명시된 경우를 제외하고 평소대로 작동합니다.

  • 전처리 단계에서 처리되는 Windows Forms 바로 가기 키는 항상 WPF 바로 가기 키보다 우선적으로 적용됩니다. 예를 들어 Ctrl+S 바로 가기 키가 정의된 ToolStrip 컨트롤이 있으며 WPF 명령이 Ctrl+S에 바인딩되어 있는 경우 포커스에 상관없이 항상 ToolStrip 컨트롤 처리기가 먼저 호출됩니다.

  • KeyDown 이벤트에 의해 처리되는 Windows Forms 바로 가기 키는 WPF에서 마지막으로 처리됩니다. Windows Forms 컨트롤의 IsInputKey 메서드를 재정의하거나 PreviewKeyDown 이벤트를 처리하여 이 동작이 발생하지 않도록 지정할 수 있습니다. IsInputKey 메서드에서 true를 반환하거나 PreviewKeyDown 이벤트 처리기에서 PreviewKeyDownEventArgs.IsInputKey 속성의 값을 true로 설정합니다.

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 컨트롤 호스팅

Windows Forms 및 WPF 속성 매핑

참조

ElementHost

WindowsFormsHost