在XAML WPF中插入Winforms表单

时间:2010-07-08 14:38:04

标签: wpf winforms interop

我正在尝试在WPF XAML页面中集成WinForms表单。 我已经看到了使用WindowsFormsHost放置Windows窗体控件的示例,但没有用于集成整个窗体。

有办法吗? Windows窗体托管在WPF应用程序中,我现在可以将其作为新窗口加载,但不能加载到XAML页面内。

1 个答案:

答案 0 :(得分:3)

将WinForms表单放在WPF表单中的WindowsFormsHost标记内是一个错误。但是您可以从任何WPF项目中实例化新表单。方法如下:

假设您有两个项目“WinFormProj”和“WPFProj”。 WinFormProj有一个名为“Login”的表单。

首先在WPFProj项目中添加一个引用到WinFormProj。

然后在任何WPFProj元素的任何事件后面,执行以下操作:

var winFormWindow = new WinFormProj.Login();  
winFormWindow.Show();  
// or  
windFormWindow.ShowDialog();  

如果不这样做,您可以将WinForms表单转换为用户控件,存在于WindowsFormsHost WPF标记中。要做到这一点,通常就像......一样简单。

转到类声明并更改:

public class Login : Form

public class Login : UserControl

接下来,在您的WPF表单中,将WinForms项目添加为xml命名空间:

xmlns:winForms="clr-namespace:WinFormsProj;assembly=WinFormsProj"

最后,将此添加到您的Grid / StackPanel /无论您希望托管用户控件的位置:

<WindowsFormsHost Name="LoginControl">
    <winForms:LogIn />
</WindowsFormsHost>

一旦你揭开神秘面纱,就会非常简单。