如何在WPF程序中使用ArcGIS Engine的控件

原文 http://www.gisall.com/html/47/122747-4038.htmlhtml

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为咱们提供了两中途径:orm

<!--[if !supportLists]-->一、 <!--[endif]-->使用WindowsFormsHost管理ArcGIS Engine WinForm控件,并进行互操做。htm

<!--[if !supportLists]-->二、 <!--[endif]-->使用WindowsFormHost加载WinForm窗体,这样在WinForm中就能像平时同样加载Engine的控件了。对象

第一种方法须要使用代码了加载值Engine控件,示例代码以下:事件

首先在主程序的Xaml文件里添加WindowsFormsHost对象:开发

<my:WindowsFormsHost Name="mapHost" Margin="174,30,0,22" />get

而后在主程序的构造函数里添加代码加载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);