상세 컨텐츠

본문 제목

WPF 와 Windows Forms 상호 연동

C#/WPF

by 탑~! 2011. 5. 13. 09:35

본문


WinForm 프로젝트에 WPF 사용자 정의 컨트롤을 추가한다

이렇게 하면 UserControl 이라는 WPF 코드가 생성된다.

WinForm 디자인창에서 WPF 상호 운용성 -> ElementHost를 넣어 준다.

ElementHost  의 Child를 생성한 UserControl 로 설정해주거나

눌러서 설정해 준다.

WinForm 에서 WPF에 있는 컨트롤에 접근하려면 다음과 같이 간단하게 된다.


// WPF 안에있는 TextBox에 접근해 보자
            (this.elementHost1.Child as UserControl1).txt.Text = "!!!! ㅋㅋㅋ";

-- WPF 에서 부모인 WinForm에 접근하려면 조금 더 복잡하다.

 부모 자식관계 트리구조는 WinForm -> ElementHost -> UserControl(WPF) 와 같다.

우선 WPF 코드비하인드에서 부모폼을 선언해 주고 메서드와 멤버를 지정해준다(리팩터링 해도 되고, 써줘도 되고..)

        //private Form1 parentForm; //** 리팩터링 -> 필드캡슐화
        //public Form1 ParentForm
        //{
        //    get { return parentForm; }
        //    set { parentForm = value; }
        //}

        public Form1 parentForm{get; set;} //** 위의 주석처리한 툴을 이용한 코드 생성과 같다(자동구현프로퍼티)


그리고 부모폼에서 WPF에게 부모가 나다 라고 알려준다.


// WPF 컨트롤에게 부모가 나다 라고 알려주자
            (this.elementHost1.Child as UserControl1).parentForm = this; //!!!**


위의 작업을 해주고 나면 WPF에서 아래와 같은 방법으로 부모창(WinForm)에 접근이 가능하다.


this.parentForm.textBox1.Text = "aaaa1";

관련글 더보기