如何最好地利用新的类型等效功能在 WPF 应用程序中托管 MapPoint 控件。
这与我的另一个问题有关,即就新的 NoPIA 和 Type Equivalance 功能而言,维护互操作汇编需要什么。但现在我有兴趣实际获得一个有效的实现来展示如何将它用于MapPoint Control ActiveX 控件。
我能够遵循有关确保 Visual Studio 中的Embed Interop Types选项为我的 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 中托管它. 从我目前的研究来看,我可以通过创建一个继承自HwndHost的类直接在 WPF 中托管 MapPoint 控件班级。然而,这似乎需要大量工作来免费复制 Windows 窗体方法用于在互操作程序集中生成的内容。我的假设是,通过新的类型等效功能,我们不仅可以实例化控件,还可以将这些控件直接集成到 WPF 或 Windows 窗体应用程序中,而且几乎没有什么麻烦。
我错过了什么吗?如果不是,在 WPF 应用程序中使用 MapPoint 控件的最明智的方法是什么?我希望答案不是仍然让 Visual Studio 或 TlbImp.exe 实用程序生成我们在 Windows 窗体开发中一直使用的旧互操作程序集。
顺便说一句,我确实找到了有关导入类型库的不同方法的一些细节,但我不太明白它如何适用于我的情况。