問題
WPFのウィンドウ(System.Windows.Window)を
WindowsFormsのフォーム(System.Windows.Forms.Form)のOwnerに設定したい。
検索すると一番上に↓が出てきたが欲しい答えではなかったので別解をメモしておく。
WPFウィンドウをWindowsフォームの親に設定する - MSDN
解法
WindowInteropHelperとIWin32Windowを利用する。
// WPFのウィンドウ
var window = new System.Windows.Window();
// WindowsFormsのフォーム
var form = new System.Windows.Forms.Form();
// おまじない
var wih = new System.Windows.Interop.WindowInteropHelper(window);
var wnd = new Win32Window(wih.Handle);
// WPFをWindowsFormsのOwnerに設定
form.Show(wnd);
// IWin32Windowを継承したクラスを用意しておく
class Win32Window : System.Windows.Forms.IWin32Window
{
public IntPtr Handle { get; }
public Win32Window(IntPtr handle)
{
this.Handle = handle;
}
}