天天看點

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

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);