OPCIÓN 1
IWin32Window sólo se espera una propiedad Handle
, lo cual no es demasiado difícil de implementar ya que ya tiene la IntPtr. Create a wrapper clase que implementa 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;
}
A continuación, obtener su IWin32Window así:
IWin32Window win32Window = new WindowWrapper(new WindowInteropHelper(this).Handle);
o (en respuesta a la sugerencia de Keith'):
IWin32Window win32Window = new WindowWrapper(this);
OPCIÓN 2 (gracias al comentario de Scott Chamberlain)
Utilice la clase NativeWindow existente, que implementa IWin32Window:
IWin32Window win32Window = new NativeWindow();
((NativeWindow)win32Window).AssignHandle(new WindowInteropHelper(this).Handle);
Gran respuesta; la clase, sin embargo, podría aceptar una ventana y manejar la primera capa de envoltura de WindowInteropHelper, así que todo lo que necesita es 'new WindowWrapper (esto)' y tiene algo que pasar como IWin32Window. – KeithS
En lugar de crear su propia clase, .NET proporciona una clase similar ya en su ['NativeWindow'] (https://msdn.microsoft.com/en-us/library/system.windows.forms.nativewindow%28v=vs. Clase 110% 29.aspx). Simplemente llame a ['AssignHandle (IntPtr)'] (https://msdn.microsoft.com/en-us/library/system.windows.forms.nativewindow.assignhandle (v = vs.110) .aspx) con el controlador desde la función proporcionada por el OP. –
No pude obtener la Opción 2 para compilar. Mi código ... 'System.Windows.Forms.IWin32Window win32Window = new System.Windows.Forms.NativeWindow(); win32Window.AssignHandle (new WindowInteropHelper (this) .Handle); ' ... provoca el error de compilación" IWin32Window no contiene una definición para AssignHandle ". Intenté usar la versión System.Windows.Interop de IWin32Window pero eso no tiene un método NativeWindow(). –