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