原文 http://www.gisall.com/html/47/122747-4038.html
WPF(Windows Presentation Foundation)是美国微软公司推出.NET Framework 3.0的组成部分之一,它是一套基于XML、.NET Framework、矢量绘图(vector graphic)技术的展示层(presentation layer)开发框架,微软视其为下一代用户界面(user interface)技术,将广泛被用于下一代的Windows平台(Windows Vista)的界面开发。
WPF使用一种新的XAML(eXtensible Application Markup Language)语言来开发界面,这将把界面开发以及后台逻辑很好的分开,降低了耦合度,使用户界面设计师与程序开发者能更好的合作,降低维护和更新的成本。
而ArcGIS Engine开发包只提供了WinForm控件,如Map Control、Toc Control、Toolbar Control等。那么假如我们要在WPF程序中使用ArcGIS Engine,那应该如何调用呢?
ArcGIS Engine为我们提供了两中途径:
<!--[if !supportLists]-->1、 <!--[endif]-->使用WindowsFormsHost管理ArcGIS Engine WinForm控件,并进行互操作。
<!--[if !supportLists]-->2、 <!--[endif]-->使用WindowsFormHost加载WinForm窗体,这样在WinForm中就能像平时一样加载Engine的控件了。
第一种方法需要使用代码了加载值Engine控件,示例代码如下:
首先在主程序的Xaml文件里添加WindowsFormsHost对象:
<my:WindowsFormsHost Name="mapHost" Margin="174,30,0,22" />
然后在主程序的构造函数里添加代码加载Engine控件
mapControl = new AxMapControl ();
mapHost.Child = mapControl;
这样就可以把Engine的WinForm控件加载到WPF程序中了。
这种方式的缺点就是,无法通过Visual Studio的用户设计界面来设置控件的属性。
第二种方法的思路如下:
在WPF程序中添加一个WinForm窗体对象,里面可以自由地使用Engine控件。
然后在WPF主程序中,通过某项事件,如Application的StartUp事件,实例化该窗体,并调用它的show方法显示。
当使用这两种方法来调用Engine控件时,都不要忘记,ArcGIS 10在调用所有ArcObject对象前,都需要进行运行时绑定,示例代码如下:
ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Engine);