본문 바로가기
WPF

WinForm안에 있는 WFP 창에서 owner를 지정하는 방법

by leo21c 2023. 2. 8.

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();

https://learn.microsoft.com/ko-kr/dotnet/api/system.windows.interop.windowinterophelper?view=windowsdesktop-7.0 

 

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();

'WPF' 카테고리의 다른 글

WPF MVVM Window Close Action 처리  (0) 2023.06.15
C# UI Thread 에러 발생할 경우  (0) 2023.02.13
Telerik RadRibbonView Example (리본바 메뉴 예제)  (0) 2022.01.19
Telerik Menu 추가  (0) 2021.12.21
Hierarchical RadGridView Example  (0) 2021.09.02