wpf 中加载winform窗体

using  System.Windows.Controls;
using  System.Windows.Forms.Integration;
using  Fibonacci;

namespace  WPFHost
{
     ///  <summary>
     ///  Interaction logic for Page1.xaml
     ///  </summary>
     public   partial   class  Page1 : Page
    {
         private   readonly  MainForm mainForm =  new  MainForm();

         public  Page1()
        {
            InitializeComponent();

             // Create a Windows Forms Host to host a form
            WindowsFormsHost windowsFormsHost =  new  WindowsFormsHost();
            
            stackPanel.Width = mainForm.Width;
            stackPanel.Height = mainForm.Height;
            windowsFormsHost.Width = mainForm.Width;
            windowsFormsHost.Height = mainForm.Height;
          
            mainForm.TopLevel =  false ;

            windowsFormsHost.Child = mainForm;

            stackPanel.Children.Add(windowsFormsHost);
        }
    }
}
在Windows Forms (WinForms) 应用程序嵌入 WPF 窗体需要一些额外步骤,因为WinForms和WPF是两个独立的框架。以下是一个简单的步骤说明: 1. **添加引用**:首先,在WinForms项目右键单击“References”,然后选择“Add Reference”。在弹出的对话框里,找到并勾选“PresentationFramework”(如果它不在可用的列表里,可能需要安装.net Framework 4.5 或更高版本)。 2. **创建WPF窗体**:在WinForms项目新建一个WPF窗体,例如命名为`WpfForm.xaml.cs`。这将生成一个WPF窗体文件和对应的后台代码。 3. **加载WPF窗体**:在WinForms上添加一个用户控件或者通过其他方式(如Panel或Window)来承载WPF窗体。例如,你可以使用`InteropServices`库的`CreateObject`函数动态创建一个WPF窗口实例: ```csharp using System.Windows.Forms; using System.Runtime.InteropServices; private void ShowWpfFormButton_Click(object sender, EventArgs e) { // 调整WPF窗体的构造函数以接受适当的参数,如果有的话 string wpfWindowName = "YourWpfFormName"; object wpfInstance = Activator.CreateInstance(Type.GetTypeFromProgID($"WPFNamespace.{wpfWindowName}")); using (var window = new WindowInteropHelper(wpfInstance as Window)) { window.Show(); } } ``` 4. **处理窗体关闭事件**:记得在WPF窗体处理Closing事件,以便在用户关闭时正确地关闭嵌入的WPF窗体。 注意:这种方法不是推荐的最佳实践,因为它涉及到COM interop,可能会导致性能和兼容性问题。通常更推荐的是使用Xceed或其他第三方控件(如Prism)来实现跨框架通信,或者考虑直接重构成统一的UI框架(如使用UWP或WPF)。如果你只是临时需要嵌套展示,可以考虑使用第三方库简化过程。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值