OPTION 1
IWin32Window只需要一個Handle
的性質,因爲你已經有了的IntPtr這是不是太難以實施。 Create a wrapper類,它實現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這樣的:
IWin32Window win32Window = new WindowWrapper(new WindowInteropHelper(this).Handle);
或(響應KeithS」建議):
IWin32Window win32Window = new WindowWrapper(this);
OPTION 2 (thx to Scott Chamberlain的評論)
使用現有的實現IWin32Window的NativeWindow類:
IWin32Window win32Window = new NativeWindow();
((NativeWindow)win32Window).AssignHandle(new WindowInteropHelper(this).Handle);
很好的回答;該類可能會接受一個Window並處理第一層WindowInteropHelper包裝,所以您只需要「新的WindowWrapper(this)」,並且您有一些東西可以作爲IWin32Window傳入。 – KeithS 2015-04-11 01:56:51
而不是製作自己的類.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提供的功能。 – 2015-04-16 04:28:46
我無法獲得選項2編譯。我的代碼... 'System.Windows.Forms.IWin32Window win32Window = new System.Windows.Forms.NativeWindow(); win32Window.AssignHandle(new WindowInteropHelper(this).Handle);' ...導致編譯錯誤「IWin32Window不包含AssignHandle的定義」。我嘗試使用IWin32Window的System.Windows.Interop版本,但沒有NativeWindow()方法。 – 2017-12-28 15:27:04