2010-06-22 13 views
3

Comment utiliser au mieux les nouvelles fonctionnalités d'Equivalence de type pour héberger le contrôle MapPoint dans une application WPF.Comment utiliser au mieux les nouvelles fonctionnalités d'équivalence de type pour héberger le contrôle MapPoint dans une application WPF

Ceci est lié à mon autre question sur ce qui est impliqué jusqu'à maintaining interop assembleis en ce qui concerne les nouvelles fonctionnalités NoPIA et Equivalence de type. Mais maintenant, je suis intéressé à obtenir une implémentation de travail pour montrer comment cela pourrait être utilisé en ce qui concerne le contrôle ActiveX MapPoint Control.

J'ai pu suivre les conseils pour que l'option Embed Interop Types dans Visual Studio soit définie sur True pour ma référence MapPoint et que je puisse compiler et exécuter du code comme suit dans mon application WPF Il est intéressant de traiter l'interface MapPoint.MappointControl comme si elle avait un constructeur.

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    var map = new MapPoint.MappointControl(); 

    if (map.ActiveMap == null) 
    { 
     map.NewMap(MapPoint.GeoMapRegion.geoMapNorthAmerica); 
    } 
} 

Ce code semble fonctionner si je devine que les appels COM se produisent tous correctement dans les coulisses, mais le problème devient ce contrôle ActiveX intégré dans le heirarcy de commande pour ma fenêtre. Lors de l'utilisation des anciennes méthodes d'intropulation ActiveX à partir de Windows Forms, l'hôte de contrôle ActiveX généré représenterait mon contrôle ActiveX mais également un contrôle Windows Forms qui me permet de l'héberger dans un formulaire ou dans un WindowsFormsHost dans une application WPF . De mes recherches jusqu'à présent, il semble que je puisse être en mesure de créer une classe qui hérite de la classe HwndHost. Cependant, il semble qu'il puisse y avoir beaucoup de travail dupliquant ce que la méthodologie Windows Forms avait l'habitude de générer dans l'assemblage interop gratuit. Mon hypothèse était qu'avec les nouvelles fonctionnalités d'équivalence de type, nous serions capables non seulement d'instancier les contrôles, mais aussi d'intégrer ces contrôles directement dans un WPF ou une application Windows Forms sans trop de problèmes.

Ai-je raté quelque chose? Sinon, quelle est la manière la plus saine d'utiliser le contrôle MapPoint dans une application WPF? J'espère que la réponse ne doit pas toujours avoir Visual Studio ou l'utilitaire TlbImp.exe générer les anciens assemblys interop que nous avions utilisé dans le développement de Windows Forms. Par ailleurs, j'ai trouvé quelques détails sur les différentes méthodes de importing a type library mais je ne comprends pas très bien comment cela peut s'appliquer à ma situation.

Répondre

0

Je n'ai pas utilisé MapPoint avec WPF, mais je pense que vous ne devriez utiliser manuellement tblimp.exe pour MapPoint 2006 (et plus tôt). Je comprends que tout est automatisé pour MapPoint 2009, 2010, et vraisemblablement MapPoint 2011 lors de sa sortie.

+0

Par automatisé, vous voulez dire que Visual Studio exécute automatiquement le comportement de l'utilitaire TblImp.exe? Sinon, s'il existe un autre moyen qui n'implique pas la gestion de la DLL d'interopérabilité générée, ce serait excellent si vous pouviez pointer vers des ressources sur le sujet. – jpierson