【发布时间】:2010-07-08 14:38:04
【问题描述】:
我正在尝试将 WinForms 表单集成到 WPF XAML 页面中。 我见过使用 WindowsFormsHost 放置 Windows 窗体控件的示例,但不是用于集成整个窗体。
有办法吗? Windows 窗体托管在 WPF 应用程序内,我目前能够将其作为新窗口加载,但不能加载到 XAML 页面内。
【问题讨论】:
我正在尝试将 WinForms 表单集成到 WPF XAML 页面中。 我见过使用 WindowsFormsHost 放置 Windows 窗体控件的示例,但不是用于集成整个窗体。
有办法吗? Windows 窗体托管在 WPF 应用程序内,我目前能够将其作为新窗口加载,但不能加载到 XAML 页面内。
【问题讨论】:
将 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>
一旦你揭开它的神秘面纱就很简单了。
【讨论】: