WinForm안에 있는 WFP 창에서 owner를 지정하는 방법
WFP에서 Owner를 지정할 아래와 같이 사용할 수 있다.
Owner = Application.Current.MainWindow;
그런데 WinForm안에 WPF를 이용할 때 WPF의 Dialog Owner를 기존과 같은 방식으로하면 Current가 null 에러가 발생한다. WinForm에서부터 Window Handle을 넘겨 받아 사용할 수도 있지만 아래와 같이 Process에서 Handle을 받아서 처리를 할 수도 있다.
WPFTestView dlg = new WPFTestView();
System.IntPtr iMainHandle = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle;
System.Windows.Interop.WindowInteropHelper winHelper = new System.Windows.Interop.WindowInteropHelper(dlg);
winHelper.Owner = iMainHandle;
dlg.ShowDialog();
WindowInteropHelper 클래스 (System.Windows.Interop)
WPF(Windows Presentation Foundation) 및 Win32 코드 사이의 상호 운용을 지원합니다.
learn.microsoft.com
WindowInteropHelper 클래스
설명
이 클래스의 멤버를 사용하면 호출자가 Win32 HWND 및 WPF Window의 부모 HWND에 대한 내부 액세스를 가질 수 있습니다. 적절한 보안 검사는 해당 멤버에 의해 수행됩니다.
HWND를 기반으로 하는 보다 구체적인 개체가 필요할 때마다 이 클래스를 사용합니다.
예제 시나리오는 Win32 애플리케이션에서 WPF 대화 상자를 호스트해야 하는 경우입니다. 대화 상자의 WindowInteropHelper WPF 창 개체를 사용하여 초기화합니다. 그런 다음, 속성에서 Handle WPF 창의 핸들(HWND)을 가져오고 속성을 사용하여 WPF 창의 소유자를 Owner 지정할 수 있습니다. 다음 코드 예제에서는 Win32 애플리케이션에서 WPF 대화 상자를 호스팅할 때 사용하는 WindowInteropHelper 방법을 보여 있습니다.
WindowInteropHelper wih = new WindowInteropHelper(myDialog);
wih.Owner = ownerHwnd;
myDialog.ShowDialog();