2

我有一个 Visual Studio 2012 C# 应用程序,它使用嵌套在 WPF WindowsFormsHost 容器中的 WinForms UserControl。该应用程序运行良好。要将 WinForms UserControl 添加到项目中,我必须直接编辑主窗体的 XAML 文件。这并不难,但如果可能的话,我希望能够从工具箱中工作。

我在 Stack Overflow 上发现了几个不同的线程,它们处理了让控件出现在 Visual Studio 工具箱中的问题,但没有一个讨论过让 WinForms 控件出现在 WPF 项目(混合项目)的工具箱中。请注意,当我在 WinForms 项目中使用WinForms UserControl 时,它确实出现在工具箱中。但如果宿主项目是 WPF 项目,我只能在工具箱中看到 WPF 控件。我尝试通过执行以下操作添加 WinForms 控件:

  • 在工具箱中单击鼠标右键
  • 选择选择项目
  • 选择 .NET Framework 组件选项卡
  • 浏览到包含 WinForms UserControl 的 DLL
  • 选择 DLL 并单击 OK

包含的控件被导入到 .NET Framework 组件列表中,但在我退出“选择项”对话框后不显示在工具箱中。奇怪的是,我尝试卸载 DLL 的控件并重复此操作几次,但结果不一致。我从来没有显示控件,但有一次我得到一个对话框,说“控件已导入但在设计器中未激活”,我应该确保它们兼容。还有一次我得到一个错误框,说 DLL 不包含任何可用的控件。大多数情况下,它会在 .NET Framework 组件列表中显示导入的控件并带有复选标记列表中它们旁边,并且行以蓝色突出显示。但是同样,尽管没有看到任何错误或警告消息,但它们并未显示在工具箱中。请注意,作为 WinForms 控件 DLL 源的 .NET 项目是解决方案中的一个项目。

那么,是否有可能让 Winforms UserControl 显示在 WPF 项目的工具箱中?如果是这样,怎么做?

4

1 回答 1

1

不是最直接的解决方案,但您可以创建一个包含WindowsFormsHost对象的包装器。我无法记录它,但我想由于空域问题,您不能原生地组合这两种控制类型。

编辑:我创建了一个 WPF 应用程序解决方案,然后将一个 WPF 用户控件库项目添加到该解决方案中。之后,我WindowsFormsIntegration在后一个项目中引用,添加了一个 WindowsFormsHost容器,将 a 设置System.Windows.Forms.TextBox为其子项。编译后,在 ToolBox 中有一个新元素,包含新创建的控件。我可以将它从那里拖到“所有 WPF 控件”或从“选择项目”对话框中选择已编译的程序集。

于 2012-12-16T23:33:11.260 回答