【问题标题】:Make WinForms UserControl appear in Toolbox for WPF Visual C# project?使 WinForms UserControl 出现在 Toolbox for WPF Visual C# 项目中?
【发布时间】:2012-12-04 02:18:32
【问题描述】:

我有一个 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 并单击“确定”

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

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

【问题讨论】:

    标签: c# wpf winforms visual-studio xaml


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-01-05
      • 2013-09-08
      • 2014-04-01
      • 2023-03-03
      • 1970-01-01
      • 2014-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多