我正在尝试在WPF XAML页面中集成WinForms表单。 我已经看到了使用WindowsFormsHost放置Windows窗体控件的示例,但没有用于集成整个窗体。
有办法吗? Windows窗体托管在WPF应用程序中,我现在可以将其作为新窗口加载,但不能加载到XAML页面内。
答案 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>
一旦你揭开神秘面纱,就会非常简单。