【问题标题】:How to insert existing Form class from WinForms application into the WPF application如何将现有 Form 类从 WinForms 应用程序插入 WPF 应用程序
【发布时间】:2014-01-02 18:16:23
【问题描述】:

我在名为AMC_Demo 的应用程序中创建了一个名为:Form1 的表单。如何一步一步地将Form1从WinForms应用程序导入WPF应用程序?

AMC_Demo的源码目录下我有Form1.cs,Form1.Designer.csForm1.resx。我应该将哪些以及如何复制到 WPF 项目目录以及如何导入它们,以便我可以在 WPF 解决方案中对其进行修改和开发。

我已经添加了对 System.Windows.FormsWindowsFormsIntegration 的引用

如何将表单对象精确导入 WPF 项目? 我确实问过,因为我尝试复制到 WPF 项目目录然后添加现有项目,但它被添加到项目中为:“其他解决方案“据我所知。

【问题讨论】:

标签: c# .net wpf winforms


【解决方案1】:

您应该能够在 WPF 应用程序中创建并显示表单:

// Within some method where you want the form to display
Form1 form = new Form1();
form.Show();

仅当您想在 WPF FrameworkElement 中嵌入 Windows 窗体 UserControl(或其他 Control)时才需要WindowsFormsHost

【讨论】:

  • 谢谢,但我想从这个 AMC_Demo 项目中复制 Form1。我不想从头开始创建它。
  • @Yoda 只需从 WPF 中添加对该项目的引用,并使用现有表单。无需从头开始创建。
  • 是否有可能从AMC_DEMO 物理添加表单,以便它出现在WPF 应用解决方案资源管理器中?
  • @Yoda 是的 - 如果你想这样做,只需复制文件,并将它们添加到另一个项目中。不过,您需要添加对 System.Windows.Forms 的引用。
【解决方案2】:

阅读this 演练,您会看到 WinFormHost 是 WinForm Form 类的一个特殊实例。您可以通过编程方式向其中添加控件。

对于现有的 Form 类:将表单对象导入您的项目(如,确保您可以编辑它),然后将其继承从“Form”更改为“WinFormHost”。您现在可以实例化它并将其添加到您的 WPF 窗口中,就像使用 WinFormHost 一样。

编辑: 正如我在评论中所说:您将文件复制到 WPF 项目文件夹中,然后在 VS 中右键单击该项目并选择“添加现有项目”。然后选择您复制的文件。您可能需要添加一些对 WinForm 相关的 .Net 库的引用才能编译,但编译错误应该可以帮助您。但是不要复制任何项目文件(如 .csproj)。这些可能会显示为“其他解决方案”。

【讨论】:

  • 在选项二中如何将表单对象精确地导入 WPF 项目。在AMC_Demo的源码目录下有Form1.csForm1.Designer.csForm1.resx。我应该将哪些以及如何复制到 WPF 项目目录以及如何导入它们,以便我可以在 WPF 目录中对其进行修改。
  • 您必须将所有三个复制到 WPF 项目文件夹(或为此目的创建的子文件夹),然后在 Visual Studio 中选择“添加现有项目”。如果您的表单引用了其他类和控件,则如果您添加对原始项目的引用,则不需要复制它们。就像 Reed Copsey 所说,您可能需要添加一些对某些 WinForm .Net 库的引用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-01
  • 2010-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-01
相关资源
最近更新 更多