윈폼(Winform) 컨트롤 사용하기

WPF에서 윈폼 컨트롤을 사용하기 위해서는 ElementHost라는 클래스를 통해서 윈폼 컨트롤을 WPF에 포함할 수 있습니다. ElementHost 클래스는 HwndSource와 같지만 임의의 HWND보다는 WPF 내부에 윈폼의 컨트롤을 포함시킬 수 있도록 특화도니 클래스입니다.  ElementHost 호스트는 using System.Windows.Controls을 상속받아 윈폼 컨트롤을 WPF 컨텐트(Content) 내부에 어떻게 보여줄지를 결정합니다.

[도구상자]-[항목선택]순으로 메뉴를 열면 [도구상자선택항목] 대화상자에서 ElementHost가 선택되어 있거나 선택하면 [도구상자]에 WindowsFormsHost 컨트롤이 추가된 것을 볼 수 있습니다.




using System.Windows;

using System.Windows.Controls;

 

using System.Windows.Forms.Integration;

 

namespace WPFWindowsFormsHost

{

    /// <summary>

    /// Window1.xaml에 대한 상호 작용 논리

    /// </summary>

    public partial class Window1 : Window

    {

        public Window1()

        {

            InitializeComponent();

 

            // WPF Expander Control 생성

            Expander expander = new Expander();

            expander.Header = "WPF WindowsFormsHost";

 

            // 컨트롤을 생성하고 이를 WindowsFormsHost에 매핑한다.

            WindowsFormsHost host = new WindowsFormsHost();

            host.Child = new System.Windows.Forms.MonthCalendar();

 

            // Expender Content프로퍼티에 WindowsFormsHost 인스턴스 생성

            expander.Content = host;

 

            // Root Element Expender을 추가한다.

            this.Content = expander;

        }

    }

}


네임스페이스에 using System.Windows.Forms.Integration를 추가하면 ElementHost 클래스를 인스턴스 할 수 있습니다. ElementHost 클래스에 있는 Child 프로퍼티는 윈폼의 컨트롤을 포함하게 하여 WPF에서 윈폼컨트롤을 보여지게 할 수있습니다.

Child 프로퍼티에 윈폼의 달력 컨트롤을 인스턴스하여 생성하면 화면에 달력이 보여지게 됩니다.



참고사이트 : http://www.danielmoth.com/Blog/2007/10/wpf-and-windows-forms-integration.html
참고도서 : 애덤 네이선의 WPF 언리쉬드