Использование элемента управления ActiveX в WPF

Я пытаюсь разместить элемент управления ActiveX в приложении WPF. После попытки использовать существующую информацию в сети и здесь я зашел в тупик.

Мне нужно использовать элемент управления ActiveX, предоставленный для связи с измеритель мощности УФ-излучения. Они предоставляют приложение который регистрирует и использует элемент управления и даже включает некоторые полезные демонстрационные приложения. Я вырезал файл OCX и при необходимости поместил его сюда. У вас не будет измерителя мощности, с которым можно будет поговорить, но приложение и демонстрации по-прежнему будут успешно загружать элемент управления ActiveX.

Я создал простое приложение Windows Forms. Мне удалось перенести элемент управления ActiveX на панель инструментов, перетащить его в свою форму, и все в порядке. Демо-приложения, которые они предоставляют, тоже делают это.

Однако заставить это работать в среде WPF - совсем другое дело. Элемент управления нельзя добавить на панель инструментов и «перетащить» в приложение.

Пока что я пробовал две техники:

  1. Методику можно найти здесь. Я могу добавить ссылку на элемент управления, но затем вхожу в ад пространства имен. Предлагаемое им пространство имен xmlns: ax не может найти информацию. Вот моя попытка, основанная на том, что мне сообщает средство просмотра объектов: xmlns:ax="clr-namespace:OphirUsbXLib;assembly=Interop.OphirUsbXLib"
  2. Найденная методика здесь. По сути, это создание нового проекта, который создает библиотеку на основе Windows Forms, которая содержит элемент управления ActiveX (yikes). Я могу добавить узел Windows Forms, но не могу получить доступ к элементу управления ActiveX внутри. Я могу сделать элемент управления общедоступным, но по-прежнему не могу вызывать методы и т. Д. Это не похоже на правильное решение.

Короче говоря, у меня есть элемент управления ActiveX, который прекрасно работает в Forms, но это настоящая сука, чтобы начать работать в WPF.

Любое понимание приветствуется!


person BabaBooey    schedule 07.09.2010    source источник


Ответы (1)


В этой ситуации я бы подумал о создании пользовательского элемента управления WinForms, который обертывает элемент управления ActiveX, который вы пытаетесь использовать.

Вы можете сделать общедоступные свойства и методы, которые предоставляют каждое из требуемых свойств и методов в элементе управления ActiveX, а затем разместить этот WinForms UC в элементе управления WPF WinFormsHost.

Я уже сделал что-то подобное, наоборот, разместив WPF UserControl в WinForms UserControl, а затем разместив его на форме VB6 в устаревшем приложении.

person benPearce    schedule 07.09.2010
comment
Я думаю, что то, что вы описываете, будет работать (второй подход), но писать новые методы доступа для доступа к элементу управления ActiveX кажется проблемой. Скажем, элемент управления имеет 50 методов, например, необходимо написать 50 новых методов, которые по существу будут передаваться элементу управления. Я бы хотел, чтобы был лучший способ. - person BabaBooey; 08.09.2010
comment
Используйте прагматический подход, предоставляйте только те методы и свойства, которые вам действительно нужны, из приложения WPF. - person benPearce; 08.09.2010