2009-06-16 4 views
0

WPF에서 새 비트를 디자인하고있는 기존 WinForms 응용 프로그램이 있습니다. 모든 것이 합리적으로 잘 진행되고 있으며, 대화의 첫 번째 필요성에 부딪혔습니다.WPF Interop 및 대화 상자

WPF에서 대화 상자를 만들고 싶습니다. 실제 컨텐트에 대해 UserControl을 수행하고 UserControl에 ShowDialog() 메서드가 없으므로 ElementForm을 통해 WinForms 양식을 통해 컨텐트를 호스트해야하는 것처럼 보입니다.

내 질문에 그 곳이 있습니다. 어떻게 작동합니까? 내가 말할 수있는 가장 좋은, WPF UserControl 심지어 (그것은 ShowDialog() 메서드를 가지고 주어진 감각을) DialogResult 속성을 가지고 있지 않습니다 - 그것은 WPF 윈도우 컨트롤을 필요로하는 것처럼 보입니다 - 그리고 난 이 경우에 사용할 수 있다고 생각합니다.

기본 흐름 및 설정에 대한 고민은 여기에 있습니다. 누군가 빛을 비출 수 있습니까?

이것도 가능합니까?

답변

2

WinForms 응용 프로그램에서 WPF 창을 열 수 있습니다.

창을 만들고 ShowDialog()으로 전화하십시오. CLR은 WPF 프레임 워크를로드하고 창을 엽니 다.

+0

그러나이 옵션은 기본 VS WinForms 프로젝트 템플릿에 나타나지 않기 때문에 별도의 프로젝트가 필요하지만 새 WPF 창을 만드는 것처럼 보입니다. 그러나 일단 그렇게하면 작동합니다. WPF 윈도우의 ShowDialog() 메소드는 우리가 익숙했던보다 세분화 된 DialogResult 대신에? bool을 반환한다는 것입니다 (당연히 이해할 수 있겠지요 - 그 클래스에 대해서는 아무것도 모르기 때문에) . 고마워요, 카메론. –

0

대부분이 WinForms 응용 프로그램처럼처럼 작동하도록하려면 사용자가 설명하는 접근 방식이 정상적으로 작동합니다. interop의 경우에도 거의 동일한 작업을 수행했습니다.

WPF는 MessageBoxes (WinForms와 약간 다른 버전 임에도 불구하고)를 지원하며 WPF Windows (DialogResult와 비슷한 것을 추가하여 확장 한 것)를 함께 사용할 수 있습니다. 그러나 제공된 WPF 컨트롤은 대화 상자, 특히 모달 대화 상자를 최소화하기 위해 UX 상호 작용을 변경하려고합니다.

당신의 인생을 더 편하게하기 위해서 WPF 컨텐츠 호스팅을 다루는 WinForms Form/ElementHost 서브 클래스를 특별히 만들었고 "DialogResult"와 같은 열거 형을 래핑하는 "사용"선언을 얼마나 좋아하는지에 따라 WPF 코드 숨김을 더 복잡하게 만들 수있는 System.Windows.Forms 네임 스페이스를 포함 할 필요가 없습니다.

+0

그러나 내가 설명한 접근 방식은 큰 누락 된 부분 인 DialogResult를 가지고 있습니다. 그게 어디서 온거야? 어떻게 든 WPF 윈도우 컨트롤을 사용할 수 있습니까? 그렇다면 어떻게? –

+0

DialogResult는 간단한 열거 형입니다 - 비슷한 것을 만들거나 (또는 ​​System.Windows.MessageBoxResult를 다시 사용하는 것) 하위 클래스 Window를 만드는 것이 어렵지 않습니다. 그러나 응용 프로그램의 핵심은 WinForm이므로 WPF 콘텐츠를 래핑하는 데 사용할 수있는 포함 된 ElementHost로 만든 특정 Form 파생 클래스가 있어야합니다. – micahtan