OPTION 1
IWin32Window erwartet nur eine Handle
Eigenschaft, die nicht zu schwierig zu implementieren, da Sie bereits die IntPtr haben. Create a wrapper Klasse, die IWin32Window implementiert:
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;
}
Sie dann Ihre IWin32Window wie diese bekommen würde:
IWin32Window win32Window = new WindowWrapper(new WindowInteropHelper(this).Handle);
oder (als Reaktion auf Keiths‘Vorschlag):
IWin32Window win32Window = new WindowWrapper(this);
OPTION 2 (Danke an Scott Chamberlain's Kommentar)
Verwenden Sie die vorhandene NativeWindow-Klasse, die IWin32Window implementiert:
IWin32Window win32Window = new NativeWindow();
((NativeWindow)win32Window).AssignHandle(new WindowInteropHelper(this).Handle);
Große Antwort; Die Klasse könnte jedoch ein Fenster akzeptieren und auch die erste Ebene des WindowInteropHelper-Wrappings behandeln. Sie brauchen also nur "new WindowWrapper (this)" und Sie haben etwas, das Sie als IWin32Window übergeben können. – KeithS
Anstatt eine eigene Klasse zu erstellen, stellt .NET eine ähnliche Klasse bereits in [NativeWindow] bereit (https://msdn.microsoft.com/en-us/library/system.windows.forms.nativewindow%28v=vs. 110% 29.aspx) Klasse. Rufen Sie einfach [AssignHandle (IntPtr) '] (https://msdn.microsoft.com/en-us/library/system.windows.forms.nativewindow.assignhandle (v = vs.110) .aspx) mit dem Handle von auf die vom OP bereitgestellte Funktion. –
Ich konnte Option 2 nicht kompilieren. Mein Code ... 'System.Windows.Forms.IWin32Window win32Window = neues System.Windows.Forms.NativeWindow(); win32Window.AssignHandle (neues WindowInteropHelper (this) .Handle); ' ... führt zum Kompilierungsfehler" IWin32Window enthält keine Definition für AssignHandle ". Ich habe versucht, die System.Windows.Interop-Version von IWin32Window, aber das hat keine NativeWindow() -Methode. –