如何最好地利用新的类型等效功能在 WPF 应用程序中托管 MapPoint 控件
Posted
技术标签:
【中文标题】如何最好地利用新的类型等效功能在 WPF 应用程序中托管 MapPoint 控件【英文标题】:How to best utilize the new Type Equivalance features to host the MapPoint Control in a WPF Application 【发布时间】:2011-03-07 01:15:21 【问题描述】:。
这与我关于 maintaining interop assembleis 关于新 NoPIA 和类型等效功能的其他问题有关。但现在我有兴趣实际获得一个有效的实现来展示如何将其用于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 类的类来实现host the MapPoint Control directly in WPF。然而,这似乎需要大量工作来免费复制 Windows 窗体方法用于在互操作程序集中生成的内容。我的假设是,借助新的类型等效功能,我们不仅可以实例化控件,而且还可以轻松地将这些控件直接集成到 WPF 或 Windows 窗体应用程序中。
我错过了什么吗?如果不是,在 WPF 应用程序中使用 MapPoint 控件的最明智的方法是什么?我希望答案是不再让 Visual Studio 或 TlbImp.exe 实用程序生成我们在 Windows 窗体开发中一直使用的旧互操作程序集。
顺便说一句,我确实找到了一些关于 importing a type library 不同方法的详细信息,但我不太明白它如何适用于我的情况。
【问题讨论】:
【参考方案1】:我没有将 MapPoint 与 WPF 一起使用,但我认为您应该只手动将 tblimp.exe 用于 MapPoint 2006(及更早版本)。我知道 MapPoint 2009、2010 和大概 MapPoint 2011 发布时,一切都是自动化的。
【讨论】:
自动化是指 Visual Studio 自动执行 TblImp.exe 实用程序的行为?否则,如果有其他不涉及管理生成的互操作 dll 的方法,那么如果您能指出有关该主题的一些资源,那就太好了。以上是关于如何最好地利用新的类型等效功能在 WPF 应用程序中托管 MapPoint 控件的主要内容,如果未能解决你的问题,请参考以下文章
WPF等效于Application.AddMessageFilter(Windows窗体)