是否可以通过容器/包装器在WPF表单中托管WinForm表单?

jas*_*onk 6 c# wpf winforms-interop visual-studio-2008

有没有办法在WPF表单中的某种容器或包装器类型控件中托管/显示完整的WinForms表单(而不仅仅是单个控件)?我正在寻找类似于概念的东西来自虚拟包含来自php或iframe的html.可能通过将其编译为OCX或DLL.

who*_*ine 19

您可以使用以下代码执行此操作:

在你的XAML中:

<WindowsFormsHost name="wfHost" />
Run Code Online (Sandbox Code Playgroud)

在您的代码隐藏中:

Form foo = new Form();
foo.TopLevel = false;
foo.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
wfHost.Child = foo;
Run Code Online (Sandbox Code Playgroud)


Ash*_*Ash 6

据我所知,您无法在WPF中托管实际的WinForms表单.

但是,一个很好的选择是在WinForms(作为Windows窗体控件库项目)中创建一个包含所有必需功能和子控件的普通UserControl.

然后在您的WPF项目中,引用WindowsFormsIntegration.dll(应该在Add References的.NET选项卡中).

然后还引用包含WinForms UserControl的程序集,最后将一个WindowsFormsHost容器添加到XAML.

有关更多信息,请参阅Sacha Barber的这个有用的教程.