옵션 1
IWin32Window은 당신이 이미 IntPtr입니다이 있기 때문에 구현하기가 너무 어려워하지 않은 Handle
속성을 기대하고있다. 구현 Create a wrapper 클래스 IWin32Window :
IWin32Window win32Window = new WindowWrapper(new WindowInteropHelper(this).Handle);
또는 (KeithS '제안에 대한 응답) : 당신은 다음 IWin32Window이 같은 얻을 것
public class WindowWrapper : System.Windows.Forms.IWin32Window
{
public WindowWrapper(IntPtr handle)
{
_hwnd = handle;
}
public WindowWrapper(Window window)
{
_hwnd = new WindowInteropHelper(window).Handle;
}
public IntPtr Handle
{
get { return _hwnd; }
}
private IntPtr _hwnd;
}
IWin32Window win32Window = new WindowWrapper(this);
옵션을 2 (스콧 체임벌린의 코멘트에 thx)
IWin32Window를 구현하는 기존 NativeWindow 클래스를 사용하십시오.
IWin32Window win32Window = new NativeWindow();
((NativeWindow)win32Window).AssignHandle(new WindowInteropHelper(this).Handle);
위 답변; 그래도 클래스는 Window를 받아 들일 수 있고 WindowInteropHelper의 첫 번째 레이어도 처리 할 수 있으므로 필요한 것은 새로운 WindowWrapper (이)와 IWin32Window로 전달할 항목이 있습니다. – KeithS
자신의 클래스를 만드는 대신 .NET은 이미 ['NativeWindow'] (https://msdn.microsoft.com/en-us/library/system.windows.forms.nativewindow%28v=vs)에 비슷한 클래스를 제공합니다. 110 % 29.aspx) 수업. 핸들을 사용하여 ['AssignHandle (IntPtr)'] (https://msdn.microsoft.com/en-us/library/system.windows.forms.nativewindow.assignhandle (v = vs.110) .aspx)를 호출하십시오. OP가 제공하는 기능. –
옵션 2를 컴파일 할 수 없습니다. 내 코드 ... 'System.Windows.Forms.IWin32Window win32Window = new System.Windows.Forms.NativeWindow(); win32Window.AssignHandle (새 WindowInteropHelper (this) .Handle); ... "IWin32Window에 AssignHandle에 대한 정의가 없습니다"라는 컴파일 오류가 발생합니다. IWin32Window의 System.Windows.Interop 버전을 사용해 보았지만 NativeWindow() 메서드가 없습니다. –