2010-09-07 42 views
1

我正試圖在WPF應用程序中託管一個ActiveX控件。嘗試在網絡上使用現有信息並在此處嘗試後,我遇到了一個死衚衕。在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控件。我可以將控件公開,但我仍然不能調用方法等。這看起來不是正確的解決方案。

總之,我有一個ActiveX控件,在Forms中工作得很漂亮,但是在WPF中工作起來卻是一個婊子。

任何見識都被讚賞!

回答

2

在這種情況下,我會考慮製作一個WinForms用戶控件,它封裝了您正在嘗試使用的ActiveX控件。

您可以製作公開屬性和方法,以暴露ActiveX控件上的每個必需屬性和方法,然後將此WinForms UC託管在WPF WinFormsHost控件中。

我已經做了類似的事情,反過來,在WinForms UserControl中託管一個WPF UserControl,然後在一個遺留應用程序的VB6 Form上託管它。

+0

我認爲你所描述的將會起作用(第二種方法),但是要編寫新的訪問方法來獲得ActiveX控件,看起來很痛苦。假設該控件有50個方法,例如,需要編寫50個基本上「通過」控件的新方法。我希望有更好的方法。 – BabaBooey 2010-09-08 01:43:24

+1

採取實用的方法,只公開從WPF應用程序中實際需要使用的方法和屬性 – benPearce 2010-09-08 02:49:52