我有一个WinForm对话框,想要将其Parent属性设置为一个WPF窗口。如何操作?
ShowDialog
方法,而不是使用Parent
属性。您可以编写辅助类。class Wpf32Window : IWin32Window
{
public IntPtr Handle { get; private set; }
public Wpf32Window(Window wpfWindow)
{
Handle = new WindowInteropHelper(wpfWindow).Handle;
}
}
public static class WindowExtensions
{
public static IWin32Window GetWin32Window (this Window parent)
{
return new Wpf32Window(parent);
}
}
winFormsWindow.Show(yourWpfWindow.GetWin32Window());
Handle
属性为空。您知道为什么吗? - Miklós Baloghnew Wpf32Window
从未被释放,即使程序结束后,原始进程仍然存在,因为该新窗口从未被正确地释放。 - ConradForm winFormsWindow = new Form(); IWin32Window win32WinVer = yourWpfWindow.GetWin32Window(); winFormsWindow.Show(win32WinVer); ((Window)win32WinVer).Close();
而不是以上的调用。 - ConradGetWin32Window
的结果转换为System.Windows.Window
。您不需要关闭从WindowInteropHelper
获取的句柄(请参见http://stackoverflow.com/questions/15312883/windowinterophelper-handle-do-i-need-to-release-it)。您可以使用`yourWpfWindow.Close()`关闭WPF窗口。但是,当您希望它成为新对话框的父级时(可能希望在应用程序退出时关闭子级),我不认为这样做有意义。或者,如果您可以使用模态对话框(`ShowDialog()`而不是`Show`),这将确保主WPF窗口在“子”Winform对话框之后关闭。 - nevermind