2012-12-16 29 views
2

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

我在堆栈溢出中发现了几个不同的线程,这些线程处理了在Visual Studio工具箱中出现控件时出现的问题,但是他们都没有讨论让WinForms控件出现在WPF项目(混合项目)的Toolbox中。请注意,当我在WinForms项目中使用它时,WinForms UserControl确实出现在工具箱中。但是,如果主机项目是一个WPF项目,我只能看到工具箱中的WPF控件。我试图通过执行下列添加的WinForms控制:

  • 右键单击工具箱
  • 选择选择项目
  • 选择.NET Framework组件选项卡
  • 浏览到包含DLL在用户控件的WinForms
  • 选择DLL,然后单击OK

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

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

回答

1

不是最直接的解决方案,但可以创建包含WindowsFormsHost对象的包装。我无法记录它,但我想你不能在本地组合两种控制类型,因为airspace problem

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