Как наилучшим образом использовать новые функции Type Equivalance для размещения элемента управления MapPoint в приложении WPF - PullRequest
3 голосов
/ 23 июня 2010

Как наилучшим образом использовать новые функции 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.

Кстати, я нашел некоторые подробности о различных способах импорта библиотеки типов , но я не совсем понимаю, как это применимо к моей ситуации.

1 Ответ

0 голосов
/ 24 января 2011

Я не использовал MapPoint с WPF, но я думаю, что вы должны вручную использовать tblimp.exe только для MapPoint 2006 (и более ранних версий). Я понимаю, что все автоматизировано для MapPoint 2009, 2010 и, возможно, MapPoint 2011, когда он будет выпущен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...