Как наилучшим образом использовать новые функции Type Equivalance для размещения элемента управления MapPoint в приложении WPF.
Это связано с моим другим вопросом о том, что влечет за собой поддержание Interop Assemblyis в отношении новых функций NoPIA и Type Equivalance. Но теперь я заинтересован в том, чтобы на самом деле получить работающую реализацию, чтобы показать, как это можно использовать в отношении элемента управления MapPoint ActiveX.
Мне удалось последовать совету о том, что для параметра Embed Interop Types в Visual Studio установлено значение True для моей ссылки на 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 Control в приложении WPF? Я надеюсь, что ответ не в том, чтобы Visual Studio или утилита TlbImp.exe генерировали старые сборки взаимодействия, которые мы использовали при разработке Windows Forms.
Кстати, я нашел некоторые подробности о различных способах импорта библиотеки типов , но я не совсем понимаю, как это применимо к моей ситуации.