Как наилучшим образом использовать новые функции Type Equivalance для размещения элемента управления MapPoint в приложении WPF
Как наилучшим образом использовать новые функции Type Equivalance для размещения элемента управления MapPoint в приложении WPF.
Это связано с моим другим вопросом о том, что влечет за собой поддержание взаимодействия сборок в отношении новых функций NoPIA и Type Equivalance. Но теперь я заинтересован в том, чтобы на самом деле получить работающую реализацию, чтобы показать, как это можно использовать в отношении элемента управления ActiveX элемента управления MapPoint.
Мне удалось последовать совету о том, что для параметра " Вставить типы взаимодействия" в Visual Studio установлено значение "Истина" для моей ссылки на MapPoint, и я могу скомпилировать и выполнить код, подобный следующему, в моем приложении WPF, которое интересно обрабатывает MapPoint.MappointControl интерфейс, как будто у него есть конструктор.
private void Window_Loaded(object sender, RoutedEventArgs e)
{
var map = new MapPoint.MappointControl();
if (map.ActiveMap == null)
{
map.NewMap(MapPoint.GeoMapRegion.geoMapNorthAmerica);
}
}
Этот код, кажется, работает, поэтому я предполагаю, что все COM-вызовы происходят должным образом, но проблема заключается в том, что этот элемент управления ActiveX интегрирован в иерархию элементов управления для моего окна. При использовании более старых методологий ActiveX Introp из Windows Forms у меня обычно был бы сгенерированный узел элемента управления ActiveX, который представляет мой элемент управления ActiveX, но также является элементом управления Windows Forms, который позволял мне размещать его в форме или в WindowsFormsHost в приложении WPF., Исходя из моих исследований, похоже, что я могу разместить элемент управления MapPoint непосредственно в WPF, создав класс, унаследованный от класса HwndHost. Однако, похоже, что может потребоваться много работы, чтобы дублировать методологию Windows Forms, которая использовалась для создания в сборке взаимодействия бесплатно. Я предполагал, что с новыми функциями эквивалентности типов мы сможем не только создавать экземпляры элементов управления, но и без особых проблем интегрировать эти элементы управления непосредственно в WPF или приложение Windows Forms.
Я что-то пропустил? Если нет, то каков наиболее разумный способ использования элемента управления MapPoint в приложении WPF? Я надеюсь, что ответ не в том, чтобы Visual Studio или утилита TlbImp.exe генерировали старые сборки взаимодействия, которые мы использовали при разработке Windows Forms.
Кстати, я нашел некоторые подробности о различных методах импорта библиотеки типов, но я не совсем понимаю, как это может применяться в моей ситуации.
1 ответ
Я не использовал MapPoint с WPF, но я думаю, что вы должны использовать tblimp.exe для MapPoint 2006 (и более ранних версий) только вручную. Я понимаю, что все автоматизировано для MapPoint 2009, 2010 и, возможно, MapPoint 2011, когда он будет выпущен.