WPF 컨트롤을 Winform 내부에 포함시키기 위해서는
ElementHost 클래스를 사용할 수 있습니다.
ElementHost 클래스는 System.Windows.Forms.Control을 상속받은 윈폼 컨트롤로
WPF 엘리먼트를 포함시킬 수 있도록 특화된 클래스입니다.
자, 이제 하나 하나 알아보겠습니다.
우선 윈폼 프로젝트를 생성 후 다음과 같이 참조 추가를 선택 하여,
WindowsFormIntegration.dll 을 추가합니다.
그럼 이제 포함 방법들에 대해 알아보겠습니다.
1) C# 코드
코드로만 작성 시엔 PresentationCore.dll, PresentationFramework.dll을 추가 후
다음과 같이 네임스페이스를 추가합니다.
using System.Windows.Controls;
using System.Windows.Forms.Integration;
간단하게 WPF 컨트롤 중 버튼을 추가해보겠습니다.
ElementHost host = newElementHost();
System.Windows.Controls.Button btn = new System.Windows.Controls.Button(); btn.Content = "WPF Button!!";
host.Child = btn; host.Location = newPoint(45, 10);
this.Controls.Add(host); |
System.Windows.Controls.Button과 System.Windows.Forms.Button 사이의 모호성 때문에
위와 같이 정확한 타입을 명시해야 합니다.
2) 도구 상자
윈폼 창을 선택 후 도구상자를 열어 ElmentHost 선택하여 윈폼 안에 위치시킵니다.
자동으로 PresentationCore.dll, PresentationFramework.dll이 추가됩니다.
간단한 TextBlock을 추가해 보겠습니다.
TextBlock tb = newTextBlock(); tb.Text = "WPF TextBlock!!";
elementHost1.Child = tb; |
3) WPF UserControl
우선 UserControl을 생성하겠습니다.
Xaml 의 내용은 간단하게 버튼을 위치시킨 후 Click 이벤트를 주었습니다.
<Grid> <Button Click="Button_Click"> WPFControl!! </Button> </Grid> |
privatevoid Button_Click(object sender, RoutedEventArgs e)
{ MessageBox.Show("WPF Button!!"); } |
윈폼에 ElementHost 를 올려 놓은 뒤 ◀를 눌러 WPFControl 목록을 선택합니다.
4) 윈폼 컨트롤을 포함한 WPF 컨트롤 포함하기
이번엔 윈폼 컨트롤인 MonthCalendar를 포함하는 WPF Button 컨트롤을 포함해 보겠습니다.
WindowsFormsHost 의 Child로 MonthCalendar를 포함 후
Button의 Content로 추가하였습니다.
WindowsFormsHost wHost = newWindowsFormsHost();
wHost.Child = newMonthCalendar();
System.Windows.Controls.Button btn1 = new System.Windows.Controls.Button();
btn1.Content = wHost; elementHost3.Child = btn1; |
자 지금까지의 결과를 확인해 보겠습니다.
'Window > WPF' 카테고리의 다른 글
[ WPF ] Flash in WPF (3) | 2010.04.23 |
---|---|
[ WPF ] 캡쳐보드 카메라 사용하기 (0) | 2010.04.22 |
[ WPF ] 옆으로 흐르는 TextBlock (0) | 2010.03.11 |
[ WPF ] Page간 데이터 전달 (0) | 2010.03.06 |
[ WPF ] 간단한 Image Animation (2) | 2010.02.12 |