我有一个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组件列表,但在退出“选择项目”对话框后不会显示在“工具箱”中。奇怪的是,我尝试卸载DLL的控件并重复此操作几次,结果不一致。我从来没有得到控件显示,但有一次我得到一个对话框说“控件已经导入但在Designer中没有活动”,我应该确保它们是兼容的。另一次我得到一个错误框说DLL没有任何可用的控件。大多数情况下,它会在.NET Framework组件列表中显示导入的控件,列表旁边的复选标记和蓝色突出显示的行。但同样,尽管没有看到任何错误或警告消息,但它们未显示在工具箱中。请注意,作为WinForms控件DLL源的.NET项目是解决方案中的项目。
那么,是否可以在WPF项目的工具箱中显示Winforms UserControl?如果是这样,怎么样?
答案 0 :(得分:1)
不是最直接的解决方案,但您可以创建包含WindowsFormsHost
对象的包装器。我无法记录它,但我认为由于airspace problem,你无法原生地组合这两种控件类型。
编辑:我已经创建了一个WPF应用程序解决方案,然后在解决方案中添加了一个WPF用户控件库项目。之后,我在后一个项目中引用了WindowsFormsIntegration
,添加了一个WindowsFormsHost
容器,将System.Windows.Forms.TextBox
设置为其子项。在编译之后,在ToolBox中有一个新元素,包含新创建的控件。我可以将它从那里拖到“所有WPF控件”或从“选择项目”对话框中选择已编译的程序集。