如何最好地利用新的Type Equivalance功能在WPF应用程序中托管MapPoint控件。
这与我关于新的NoPIA和Type Equivalance功能的maintaining interop assembleis所涉及的问题有关。但现在我对实际获得一个有效的实现感兴趣,以展示如何在MapPoint Control ActiveX控件中使用它。
我能够遵循有关确保Visual Studio中的嵌入互操作类型选项为我的MapPoint参考设置为True的建议,并且我能够编译和运行以下代码我的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控件集成到我的Window的控件层次中。当从Windows窗体使用较旧的ActiveX introp方法时,我通常会生成代表我的ActiveX控件的生成的ActiveX控件主机,但也是一个Windows窗体控件,它允许我在窗体中或在WPF应用程序的WindowsFormsHost中托管它。从我到目前为止的研究看来,我可以通过创建一个继承自host the MapPoint Control directly in WPF类的类来HwndHost。然而,这看起来可能是很多工作重复了Windows Forms方法在互操作程序集中免费生成的内容。我的假设是,使用新的Type Equivalence功能,我们不仅可以实例化控件,还可以直接在WPF或Windows Forms应用程序中集成这些控件,而且几乎没有问题。
我错过了什么吗?如果不是什么是在WPF应用程序中使用MapPoint控件最理智的方式?我希望答案不是仍然有Visual Studio或TlbImp.exe实用程序生成我们在Windows窗体开发中使用的旧互操作程序集。
顺便说一下,我确实找到了importing a type library不同方法的一些细节,但我不太明白它如何适用于我的情况。
答案 0 :(得分:0)
我没有将MapPoint与WPF一起使用,但我认为你应该只为MapPoint 2006(及更早版本)手动使用tblimp.exe。我知道MapPoint 2009,2010的所有内容都是自动化的,并且可能是MapPoint 2011发布时的。