【问题标题】:Inserting Winforms Form inside XAML WPF在 XAML WPF 中插入 Winforms 表单
【发布时间】:2010-07-08 14:38:04
【问题描述】:

我正在尝试将 WinForms 表单集成到 WPF XAML 页面中。 我见过使用 WindowsFormsHost 放置 Windows 窗体控件的示例,但不是用于集成整个窗体。

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

【问题讨论】:

    标签: wpf winforms interop


    【解决方案1】:

    将 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>
    

    一旦你揭开它的神秘面纱就很简单了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-16
      • 1970-01-01
      相关资源
      最近更新 更多