在WPF中使用ActiveX控件

时间:2010-09-07 20:29:56

标签: wpf winforms activex winforms-interop

我正在尝试在WPF应用中托管ActiveX控件。在尝试使用网络上的现有信息之后,我已经走到了尽头。

我需要使用提供的ActiveX控件与UV power meter进行通信。它们提供application注册和使用控件,甚至包括一些有用的演示应用程序。我删除了OCX文件并在需要时将其here。您将无法与功率计通信,但应用和演示仍将成功加载ActiveX控件。

我创建了一个简单的Windows窗体应用程序。我能够将ActiveX控件带入工具栏,将其放入我的表单中,一切都很好。他们提供的演示应用程序也是如此。

然而,让它在WPF环境中工作是另一回事。控件无法添加到工具箱中并“拖动”到应用程序中。

到目前为止,我尝试了两种技术:

  1. 找到了here的技术。我能够添加对控件的引用,但后来我输入命名空间地狱。它建议制作的xmlns:ax命名空间无法找到信息。这是我根据对象查看器告诉我的尝试:xmlns:ax="clr-namespace:OphirUsbXLib;assembly=Interop.OphirUsbXLib"
  2. 找到了here的技术。这主要是为了创建一个基于Windows窗体创建库的新项目,该窗体包含ActiveX控件(yikes)。我能够添加Windows窗体主机,但我无法访问其中的ActiveX控件。我可以将控件公开,但我仍然无法调用方法等。这看起来不是正确的解决方案。
  3. 简而言之,我有一个在Forms中运行得很漂亮的ActiveX控件,但却是在WPF中工作的真正婊子。

    非常感谢任何见解!

1 个答案:

答案 0 :(得分:2)

在这种情况下,我会考虑制作一个WinForms用户控件,它包装你试图使用的ActiveX控件。

您可以创建公开属性和方法,公开ActiveX控件上的每个必需属性和方法,然后在WPF WinFormsHost控件中托管此WinForms UC。

我已经做了类似的事情,相反,在WinForms UserControl中托管WPF UserControl,然后在遗留应用程序中的VB6表单上托管它。