2009-10-20 1 views
2

저는 기본적으로 MVVM 패턴을 구현하는 클래스 라이브러리 프로젝트 인 WPF 프로젝트에서 작업하고 있습니다. 명확성을 위해 필자는 하나의 텍스트 상자 컨트롤이있는 단일 창을 가지고 있다고 말할 것입니다.텍스트 상자 컨트롤에 텍스트 입력 문제가 있습니다.

이제이 DLL을 Windows Forms 프로젝트 인 다른 프로젝트에 추가하고이 프로젝트의 텍스트 상자 컨트롤로 창을 호출합니다.

내 Windows Forms 프로젝트에서 WPF 창을 표시하기 전에 WPF 창을 호출하고 WPF 창을 자식 창으로 표시 한 다음 WPF 창을 호출하는 단추가있는 창 하나가 있습니다.

내가 내 WPF 창을 호출하기위한 사용하고 코드입니다 :


MyWPFWindow wpfWin = new MyWPFWindow(); 
WindowInteropHelper helper = new WindowInteropHelper(wpfWin); 
helper.Owner = this.Handle; 
wpfWin.Show(); 

이 코드는 잘 작동하고 그러나 문제는 WPF 창을 보여줍니다 난에 텍스트를 입력 할 때 텍스트 상자 컨트롤 내가 할 수 없어. "delete"및 "backspace"키가 작동하고 궁금한 점은 Show() 대신 ShowDialog()를 사용하면 모든 것이 잘 작동하지만 ShowDialog()를 사용할 수 없기 때문입니다. 부모 창에 대한 액세스.

왜 이런 일이 일어 났는지 아무도 알아낼 수 있습니까?

감사합니다.

답변

7

ElementHost::EnableModelessKeyboardInterop을 WPF 창 인스턴스에 전달해야합니다. 이렇게하면 WinForms 메시지 루프에 메시지 필터가 설치되어 활성화 될 때 모든 입력을 WPF 창으로 전달합니다.

MyWPFWindow wpfWin = new MyWPFWindow(); 

WindowInteropHelper helper = new WindowInteropHelper(wpfWin); 
helper.Owner = this.Handle; 

ElementHost.EnableModelessKeyboardInterop(wpfWindow); 

wpfWin.Show(); 
+0

는 완벽했다 :

그래서 여기처럼 최종 코드가 보일 것입니다 무엇! 많은 감사합니다! – Vic