SilverLightViewer開發(fā)人員指南_第1頁
SilverLightViewer開發(fā)人員指南_第2頁
SilverLightViewer開發(fā)人員指南_第3頁
SilverLightViewer開發(fā)人員指南_第4頁
SilverLightViewer開發(fā)人員指南_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

./SilverLightViewer開發(fā)人員指南丁海二〇一〇年八月目錄簡述2背景2術語和定義2GIS<地理信息系統(tǒng)>2GPS<全球衛(wèi)星定位系統(tǒng)>2RIA<富因特網(wǎng)應用程序>3Flex3SilverLight4開發(fā)環(huán)境4必備知識4SilverLightViewer開發(fā)框架5概述5系統(tǒng)框架圖6開發(fā)人員指南7WidgetFramework基礎7系統(tǒng)配置文件11系統(tǒng)常用事件<AppEvent>17開發(fā)自己的Widget25使用外部參數(shù)34使用自定義圖形光標35附錄I:Widgets介紹35主控窗口<ViewerControllerWidget>35HeaderController35ClassicController36圖層切換<MapSwitcherWidget>38鷹眼<OverviewMapWidget>39書簽<BookmarkWidget>40附錄II:常見問題41使用跨域訪問配置文件<clientaccesspolicy.xml>41簡述本文檔用于幫助開發(fā)人員使用SilverLightViewer框架,開發(fā)基于ArcGISforSilverlight/WPFAPI2.0的RIA地圖應用。背景ESRI發(fā)布了ArcGISSilverLightAPI等快速Web開發(fā)包,受到了廣大用戶及開發(fā)商的關注。但一直以來開發(fā)商和用戶都只是使用在線的文檔及零散的在線例子,開發(fā)商或用戶準備使用ArcGISSilverLightAPI進行開發(fā)的時候,總是感到無從下手。基于以上原因,本方案旨在為客戶提供一個可擴展、移植的SilverLightAPI開發(fā)框架,并向用戶展示ArcGISSilverLightAPI的功能及魅力。術語和定義GIS<地理信息系統(tǒng)>地理信息系統(tǒng)〔GeographicInformationSystem,簡稱GIS是建立在地球科學基礎上的邊緣科學,是以地理空間數(shù)據(jù)庫為基礎,在計算機軟硬件的支持下,對空間相關資料進行采集、管理、操作、查詢分析、模擬、顯示和制圖輸出,并采用地理模型分析方法,適時提供多種空間和動態(tài)的地理信息,為地理研究和地理決策服務而建立起來的計算機技術系統(tǒng)。是融地理學、幾何學、計算機科學及各類應用對象為一體的綜合性高新技術。GPS<全球衛(wèi)星定位系統(tǒng)>GPS是全球衛(wèi)星定位系統(tǒng)<GlobalPositioningSystem,GPS>的英文縮寫,GPS利用導航衛(wèi)星進行測時和測距,以構(gòu)成全球定位系統(tǒng),能提供個人候的定位、授時、測速功能。GPS是一種精密的衛(wèi)星導航系統(tǒng)。該系統(tǒng)由24顆繞地球旋轉(zhuǎn)的衛(wèi)星組成,衛(wèi)星連續(xù)不斷地發(fā)送位置和時間信息。這些衛(wèi)星均勻地分布在6個軌道上,每個軌道有4顆衛(wèi)星。地面GPS接收機可接收5到12顆衛(wèi)星信號。為實現(xiàn)地面定位功能,GPS接收機至少需要接收4個衛(wèi)星信號,其中3個信號用來計算GPS接收機的緯度、經(jīng)度和海拔高度,第四個信號提供同步時間校準。RIA<富因特網(wǎng)應用程序>RIA是RichInternetApplication的簡稱,也稱富因特網(wǎng)應用程序,是由Macromedia〔現(xiàn)Adobe最先提示的概念,以示與傳統(tǒng)Web應用程序相區(qū)別。自從B/S架構(gòu)迅速流行開來之后,我們就一直面臨著這樣一個問題:如何做到當初C/S那樣的表示層精確控制以及良好的用戶體驗?當然,大量的利用DHTML以及JavaScript我們可以實現(xiàn)接近C/S時代的表示層控制和展現(xiàn),比如Bindows,但是我們需要付出比C/S時代更多的人力物力才能做到接近于C/S客戶端的表現(xiàn)方式,這不是我們想要的。在我們從當初狂熱的B/S浪潮中逐漸冷靜下來的時候,我們發(fā)現(xiàn)單純的瘦客戶端/胖服務器模式并非是一個萬能的模式-世間能量終究是守恒的,有得必有失,我們在獲得了B/S帶來的種種好處之后,也同樣失去了C/S帶給我們的幫助,因此RIA<RichInternetApplications>的出現(xiàn)就顯得極其自然了。RIA意味:不同凡響的Web功能、更好的用戶體驗、更強大的用戶界面、更好的交互性、更先進的開發(fā)模型、更強大的多媒體功能、更好的數(shù)據(jù)管理、更好的程序控制目前RIA開發(fā)的技術主要有,AdobeFlex、Ajax、WPF、OpenLaszlo、GoogleWebToolkit、JavaSWT、XUL、JavaFX、Silverlight。Flex隨著當今信息技術飛速發(fā)展和Internet帶寬的增加,傳統(tǒng)的文字+圖片的方式已經(jīng)不能滿足人們對Web內(nèi)容的需要。隨著Web2.0的概念越來越深入人心,Flex技術作為RIA技術的領航者已經(jīng)快速的發(fā)展到了第三個版本Flex3.0。Flex技術是完全基于矢量圖形技術的,這樣使得用戶能夠獲得更多的用戶體驗。只要瀏覽器可以播放Flash,就可以顯示Flex的網(wǎng)站。由于FlashPlayer的高市場占有率,基于Flex的RIA技術已經(jīng)逐漸成為Web2.0開發(fā)的主要技術手段。Flex的定位是提供豐富Internet應用的企業(yè)級開發(fā)框架。輕便的開發(fā)模式和良好的服務端兼容性使得Flex已經(jīng)成為主流的網(wǎng)站和電子商務的發(fā)展方向。SilverLightSilverlight是微軟推出的一個跨平臺跨操作系統(tǒng)的插件,使Web開發(fā)者能夠在瀏覽器中建造豐富的媒體體驗和RIA應用??捎糜赪indows平臺上的IE和Firefox瀏覽器,以及MacOSX平臺上的Firefox和Safari瀏覽器。Silverlight是一種新的Web呈現(xiàn)技術,能在各種平臺上運行。借助該技術,您將擁有內(nèi)容豐富、視覺效果絢麗的交互式體驗,而且,無論是在瀏覽器內(nèi)、在多個設備上還是在桌面操作系統(tǒng)〔如AppleMacintosh中,您都可以獲得這種體驗。支持創(chuàng)建3D模型、可以更輕松的現(xiàn)實視頻播放和分享的播放器一類的東西,支持搜索引擎。開發(fā)環(huán)境WindowsXp/2003/2008/7IISMicrosoftVisualStudio2010MicrosoftExpressionBlend4SilverLight4Silverlight_4_ToolkitSilverLightToolsforVisualStudio2010ArcGISforSilverlight/WPFAPI2.0SilverLightViewer1.0必備知識熟練使用VisualStudio開發(fā)SilverLight〔C#或VB熟悉ArcGISforSilverlight/WPFAPISilverLightViewer開發(fā)框架概述SilverLightViewer開發(fā)框架幫助開發(fā)人員,快速的開發(fā)和部署基于ArcGISforSilverlight/WPFAPI2.0的RIA地圖應用。 SilverLightViewer開發(fā)框架有以下特點:輕松配置,以滿足客戶業(yè)務需求和要求通過Widget來實現(xiàn)各種功能,提供許多核心的Widget如:圖層管理、鷹眼等輕松擴展,可根據(jù)自己的業(yè)務需求,輕松的編寫或下載widgetsWidgets采取按需下載管理模式,最小化服務器網(wǎng)絡負載。類似于ArcGISViewerforFlex系統(tǒng)框架圖開發(fā)人員指南WidgetFramework基礎Widget是被封裝在一起的一段或一組孤立的可執(zhí)行代碼,它實現(xiàn)了用戶的一種或一組功能或業(yè)務邏輯〔包括可視化的界面。對于面向服務的應用,Widget甚至可以是一個服務<數(shù)據(jù)、業(yè)務流程等>。用戶可以輕松的執(zhí)行這個Widget。同時Widget也支持被共享和重用。IBaseWidget接口<IBaseWidget.cs>定義了Widget的一系列通用接口,會被WidgetManager調(diào)用。publicinterfaceIBaseWidget{intID{get;set;}voidsetTitle<stringvalue>;voidsetIcon<stringvalue>;stringconfig{get;set;}ConfigDataconfigData{get;set;}voidsetState<stringvalue>;Mapmap{get;set;}voidsetPreload<stringvalue>;voidsetXYPosition<doublex,doubley>;voidsetRelativePosition<doubleleft,doubleright,doubletop,doublebottom,stringhorizontal,stringvertical>;BooleanisDragable{get;set;}BooleanisResizeable{get;set;}stringproxyUrl{get;}voidrun<>;}BaseWidget類<BaseWidget.xaml、BaseWidget.xaml.cs>Widget的基礎類,所有Widget都繼承自這個基類。它實現(xiàn)了IBaseWidget接口和一些通用的方法。一些通用的方法:publicvoidshowInfoWindow<Dictionary<string,Object>infoData>;publicvoidsetMapAction<stringaction,stringstatus,EventHandler<DrawEventArgs>callback>;publicvoidsetMapNavigation<StringnavMethod,Stringstatus>;publicvoidshowError<stringerrorMessage>;一些通用的事件:publicdelegatevoidWidgetConfigEventHandler<objectsender,AppEvente>;〔配置文件加載事件代理publiceventWidgetConfigEventHandlerWidgetConfigEvent;〔配置文件加載事件publiceventWidgetConfigEventHandlerWidgetConfigErrorEvent;〔配置文件加載失敗事件注:所有的Widget必須繼承自這個類。IWidgetPanel接口<IWidgetPanel.cs>這個接口定義了Widget模板<通用的界面及行為>在BaseWidget中被調(diào)用的接口。publicinterfaceIWidgetPanel{intwidgetId{get;set;}stringwidgetTitle{get;set;}stringwidgetIcon{get;set;}voidsetState<stringvalue>;BooleanisDragable{get;set;}BooleanisResizeable{get;set;}}WidgetPanel類<WidgetPanel.xaml、WidgetPanel.xaml.cs>一個Widget模板。提供了widget的基本的用戶界面布局<面板、窗口、標題欄、圖像按鈕等>和行為<最大化、最小化、關閉等>.通過使用Widget模板,Widget開發(fā)人員可以花更多的他們對自己的核心業(yè)務需求的開發(fā)時間。開發(fā)人員可以自定義自己的widget模板,一定要實現(xiàn)IWidgetPanel接口。一些通用的方法:publicvirtualvoidaddTitlebarButton<Stringicon,Stringtip,MouseButtonEventHandlermouseLeftButtonDown>;一些通用的事件:publiceventEventHandlerWidgetMinimizedEvent;〔最小化事件publiceventEventHandlerWidgetMaximizedEvent;〔最大化事件publiceventEventHandlerWidgetClosedEvent;〔關閉事件Widget界面元素titleBartxtTitleimgIcontitleBartxtTitleimgIconwidgetPanelContentwidgetPanelContentLayoutRootLayoutRoot界面元素嵌套關系如下圖:WidgetBarWidget和WidgetBarWidgetBarWidget控制條WidgetWidget控制條WidgetWidget:接受WidgetContorl管理。WidgetBar:不受WidgetContorl管理。系統(tǒng)配置文件 我們可以通過修改配置文件,輕松完成系統(tǒng)界面的定制。全局配置文件<默認為config.xml><userinterface>標簽段 定義用戶的UI界面。包括title、subtitle、logo、stylesheet、等標簽段。<title>:SilverLightViewer應用程序的標題。<HeaderControllerWidget的左上角顯示標題><subtitle>:SilverLightViewer應用程序的子標題。<HeaderControllerWidget的標題下方顯示><logo>:SilverLightViewer應用程序的Logo。<HeaderControllerWidget的左上角顯示><stylesheet>:SilverLightViewer應用程序的風格描述文件。<widgetlayout>:Widget的布局方式。有下面幾種布局方式:horizontal:橫向布局vertical:縱向布局〔默認float:隨意布局,widget可拖動、調(diào)整大小<map>標簽段定義Map相關的信息,<Map>標簽段包括下面的一些屬性:initialExtent:安裝時地圖顯示的區(qū)域〔XMinYMinXMaxYMaxfullExtent:地圖顯示的最大區(qū)域〔XMinYMinXMaxYMaxleft:地圖距離最左邊的距離right:地圖距離最右邊的距離top:地圖距離最上邊的距離bottom:地圖距離最下邊的距離還包含下面的標簽段:<basemaps>:定義背景地圖信息,包含mapservice標簽段<mapservice>:定義一個地圖服務信息,包含下面的一些屬性及值域Label:地圖服務的標題名type:地圖服務類型〔tiled\dynamic\virtualearth\imagevisible:地圖服務的可見性token:token串a(chǎn)lpha:透明度icon:地圖服務的圖標style:圖層風格<Road、Aerial、AerialWithLabels><只適用于virtualearth>值域:地圖服務的訪問地址<operationallayers>:定義操作地圖信息,包含layer標簽段<layer>:定義一個操作圖層信息,包含下面的一些屬性及值域Label:圖層的標題名type:圖層的類型〔tiled\dynamic\featurevisible:圖層的可見性token:token串a(chǎn)lpha:透明度icon:圖層的圖標值域:圖層的訪問地址<widgets>標簽段定義Widgets的信息。包含多個<widget>標簽段<widget>:定義一個Widget的信息,包含下面的屬性及值域Label:Widget的標題名icon:Widget的圖標type:Widget的類名〔創(chuàng)建Widget時使用preload:啟動應用系統(tǒng)時是否自動加載〔true/falseconfig:Widget的獨有的配置文件。resdict:Widget的獨有的資源文件。group:Widget的分組信息x:Widget的X軸絕對位置y:Widget的Y軸絕對位置值域:Widget所在DLL或Xap包的名稱〔含路徑<widgetbars>標簽段 定義Widgetbars的信息。包含多個<bar>標簽段<bar>:定義一個Widgetbar的信息,包含下面的屬性及值域Label:Widgetbar的標題名icon:Widgetbar的圖標type:Widgetbar的類名〔創(chuàng)建Widget時使用config:Widgetbar的獨有的配置文件。resdict:Widgetbar的獨有的資源文件。left:Widgetbar相對于最左邊的距離〔沒有設置時不參與計算right:Widgetbar相對于最右邊的距離〔沒有設置時不參與計算top:Widgetbar相對于最上邊的距離〔沒有設置時不參與計算bottom:Widgetbar相對于最下邊的距離〔沒有設置時不參與計算horizontal:Widgetbar橫向計算模式〔left<默認>:自左向右,right:自右向左vertical:Widgetbar縱向計算模式〔top<默認>:自上向下,bottom:自下向上值域:Widget所在DLL或Xap包的名稱〔含路徑Widget配置文件<*.xml> Widget獨有的配置文件,定義Widget需要的配置信息,配置文件格式及內(nèi)容由Widget自己處理〔開發(fā)人員在WidgetConfigEvent事件中處理。ConfigData類publicclassConfigData{publicDictionary<string,string>UI{get;set;}publicDictionary<string,string>Map{get;set;}publicDictionary<int,Dictionary<string,string>>Basemaps{get;set;}publicDictionary<int,Dictionary<string,string>>OperationalLayers{get;set;}publicDictionary<int,Dictionary<string,string>>Widgets{get;set;}publicDictionary<string,Dictionary<string,string>>Controls{get;set;}}系統(tǒng)常用事件<AppEvent>定義了一些列系統(tǒng)常用的事件,包含在AppEvent.cs文件中。使用監(jiān)聽和發(fā)起系統(tǒng)事件必須使用ViewerContainer全局類。 監(jiān)聽事件例子:ViewerContainer.addEventListener<AppEvent.CONTAINER_INITIALIZED,newViewerEventHandler<containerInitialized>>;觸發(fā)事件例子:ViewerContainer.dispatchEvent<AppEvent.WIDGET_RUN,newAppEvent<ItemId>>;APP_ERROR 應用程序出錯事件,在應用程序出錯時觸發(fā)。AppEvent類的data屬性為字符串類型。觸發(fā)事件示例:Stringdata="出錯了!";ViewerContainer.dispatchEvent<AppEvent.APP_ERROR,newAppEvent<data>>;CONFIG_LOADED 系統(tǒng)全局配置文件加載成功后,觸發(fā)事件。AppEvent類的data屬性為ConfigData類型實例。監(jiān)聽事件示例:ViewerContainer.addEventListener<AppEvent.CONFIG_LOADED,newViewerEventHandler<ConfigLoaded>>;privatevoidConfigLoaded<objectsender,AppEvente>{……}MAP_LOADED 地圖控件加載成功時觸發(fā)的事件。AppEvent類的data屬性為ES.Map類型實例。 監(jiān)聽事件示例:ViewerContainer.addEventListener<AppEvent.MAP_LOADED,newViewerEventHandler<MapLoaded>>;privatevoidMapLoaded<objectsender,AppEvente>{map=<Map>e.Data;}MAP_RESIZE用于改變地圖控件大小事件。AppEvent類的data屬性為Dictionary<string,Double>類型實例,包含以下的元素:"left":左邊的空白距離"right":右邊的空白距離"top":上邊的空白距離"bottom":下邊的空白距離觸發(fā)事件示例:Dictionary<string,Double>data=newDictionary<string,Double><>;data.Add<"left",0>;data.Add<"right",0>;data.Add<"top",0>;data.Add<"bottom",0>;ViewerContainer.dispatchEvent<AppEvent.MAP_RESIZE,newAppEvent<data>>;LAYER_LOADED基礎地圖圖層加載成功時觸發(fā)的事件。AppEvent類的data屬性為Null。 監(jiān)聽事件示例:ViewerContainer.addEventListener<AppEvent.LAYER_LOADED,newViewerEventHandler<OnlayerLoaded>>;privatevoidOnlayerLoaded<objectsender,AppEvente>{……}MAP_LAYER_VISIBLE 設置地圖圖層是否顯示的事件。AppEvent類的data屬性為Dictionary<string,Object>類型實例,包含以下的元素:"layer":ESRI.ArcGIS.Client.layer類型"visible":布爾類型<true/false>觸發(fā)事件示例:Dictionary<string,Object>data=newDictionary<string,Object><>;ESRI.ArcGIS.Client.Layerly=getLayer<"layer">;data.Add<"layer",ly>;data.Add<"visible",false>;ViewerContainer.dispatchEvent<AppEvent.MAP_LAYER_VISIBLE,newppEvent<data>>;BASEMAP_SWITCH 切換基礎地圖圖層顯示的事件。AppEvent類的data屬性為int類型的圖層ID<layerID>;觸發(fā)事件示例:stringlabel="StreetsMap";Dictionary<int,Dictionary<string,string>>BaseMaps=configData.Basemaps;for<inti=0;i<BaseMaps.Count<>;i++>{if<label==BaseMaps[i]["label"]>{ViewerContainer.dispatchEvent<AppEvent.BASEMAP_SWITCH,newAppEvent<i>>;break;}}WIDGET_RUN用于運行指定Widget的事件。AppEvent類的data屬性為int類型的Widget標識;觸發(fā)事件示例:ViewerContainer.dispatchEvent<AppEvent.WIDGET_RUN,newAppEvent<id>>;WIDGET_BROADCASTWidget的廣播事件,所有Widget都默認收到該事件。AppEvent類的data屬性為Dictionary<string,Object>類型實例,內(nèi)容自定;觸發(fā)事件示例:Dictionary<string,Object>data=newDictionary<string,object><>;data["closewidget"]=10;ViewerContainer.dispatchEvent<AppEvent.WIDGET_BROADCAST,newAppEvent<data>>;處理事件示例〔Widget:protectedoverridevoidProcessBroadcast<Dictionary<string,object>data>{……}SET_MAP_NAVIGATION用于指定地圖當前導航操作的事件,所有Widget可調(diào)用setMapNavigation<StringnavMethod,Stringstatus>方法觸發(fā)該事件。AppEvent類的data屬性為Dictionary<string,Object>類型實例,包含以下的元素:"tool":當前導航任務,主要包含:pan 移動地圖<Navigation.PAN>zoomin 放大地圖<Navigation.ZOOM_IN>zoomout 縮小地圖<Navigation.ZOOM_OUT>zoomfull 全景地圖<ViewerContainer.NAVIGATION_ZOOM_FULL>zoomprevious 地圖上一場景<ViewerContainer.NAVIGATION_ZOOM_PREVIOUS>zoomnext 地圖下一場景<ViewerContainer.NAVIGATION_ZOOM_NEXT>"status":當前狀態(tài)信息 觸發(fā)事件示例:setMapNavigation<"pan","移動">;SET_MAP_ACTION用于獲得地圖畫圖操作的事件所有Widget可調(diào)用setMapAction<stringaction,stringstatus,EventHandler<DrawEventArgs>callback>方法觸發(fā)該事件。AppEvent類的data屬性為Dictionary<string,Object>類型實例,包含以下的元素:"tool":當前畫圖方法,主要包含:point畫點<DrawMode.Point>rectangle畫矩形<DrawMode.Rectangle>polyline畫線<DrawMode.Polyline>polygon畫多邊形<DrawMode.Polygon>freehand手畫<DrawMode.Freehand>"status":當前狀態(tài)信息"handler":drawEnd事件句柄觸發(fā)事件示例:setMapAction<value,status,drawEnd>;privatevoiddrawEnd<objectsender,DrawEventArgse>{……}DATA_PUBLISH發(fā)布新的共享數(shù)據(jù)的事件,所有Widget可調(diào)用addSharedData<stringkey,List<object>list>方法觸發(fā)該事件。AppEvent類的data屬性為Dictionary<string,Object>類型實例,內(nèi)容為:數(shù)據(jù)標識1:數(shù)據(jù)內(nèi)容……數(shù)據(jù)標識n:數(shù)據(jù)內(nèi)容 觸發(fā)事件示例:Dictionary<string,Object>data=newDictionary<string,object><>;data.Add<key,this>;ViewerContainer.dispatchEvent<AppEvent.DATA_PUBLISH,newAppEvent<data>>;監(jiān)聽事件示例:ViewerContainer.addEventListener<AppEvent.DATA_PUBLISH,newViewerEventHandler<datapublish>>;privatevoiddatapublish<objectsender,AppEvente>{……}DATA_NEW_PUBLISHED當新的數(shù)據(jù)被加到共享數(shù)據(jù)池時觸發(fā)的事件。AppEvent類的data屬性為Dictionary<string,Object>類型實例,內(nèi)容為:數(shù)據(jù)標識1:數(shù)據(jù)內(nèi)容……數(shù)據(jù)標識n:數(shù)據(jù)內(nèi)容監(jiān)聽事件示例:ViewerContainer.addEventListener<AppEvent.DATA_NEW_PUBLISHED,newViewerEventHandler<datanewpublish>>;privatevoiddatanewpublish<objectsender,AppEvente>{……}DATA_FETCH_ALL發(fā)出獲得所有共享數(shù)據(jù)池中數(shù)據(jù)申請的事件,事件將會觸發(fā)DATA_SENT事件,所有Widget可調(diào)用fetchSharedData<>方法觸發(fā)該事件。AppEvent類的data屬性為null 觸發(fā)事件示例:this.fetchSharedData<>;DATA_FETCH發(fā)出獲得指定共享數(shù)據(jù)池中數(shù)據(jù)申請的事件,事件將會觸發(fā)DATA_SENT事件。AppEvent類的data屬性為Dictionary<string,Object>類型實例,內(nèi)容為:數(shù)據(jù)標識1:數(shù)據(jù)內(nèi)容……數(shù)據(jù)標識n:數(shù)據(jù)內(nèi)容 觸發(fā)事件示例:Stringkey="key1";ViewerContainer.dispatchEvent<AppEvent.DATA_FETCH,newAppEvent<key>>;DATA_SENT由共享數(shù)據(jù)池發(fā)出的響應數(shù)據(jù)查看申請<DATA_FETCH、DATA_FETCH_ALL>的事件。AppEvent類的data屬性為Dictionary<string,Object>類型實例,內(nèi)容為:數(shù)據(jù)標識1:數(shù)據(jù)內(nèi)容……數(shù)據(jù)標識n:數(shù)據(jù)內(nèi)容監(jiān)聽事件示例:ViewerContainer.addEventListener<AppEvent.DATA_SEND,newViewerEventHandler<datasend>>;privatevoiddatasend<objectsender,AppEvente>{……}SHOW_INFOWINDOW顯示信息窗口事件,所有Widget可調(diào)用showInfoWindow<Dictionary<string,Object>>方法觸發(fā)該事件。AppEvent類的data屬性為Dictionary<string,Object>類型實例,包含以下的元素:"icon":信息的圖標"title":信息的標題內(nèi)容"link":信息的鏈接信息"point":信息在圖上顯示的位置<.Geometry.MapPoint>"geometry":信息對應的幾何元素<.Geometry>觸發(fā)事件示例:Dictionary<string,Object>infodata=newDictionary<string,Object><>;this.showInfoWindow<infodata>;關閉信息窗口示例:this.showInfoWindow<null>;開發(fā)自己的Widget 這節(jié)將給大家介紹如何創(chuàng)建自己的Widget,當然首先我們要安裝好開發(fā)環(huán)境。然后在VS2010中打開解決方案<SilverlightViewer>。創(chuàng)建新的工程首先我們在VS2010創(chuàng)建一個新的工程,我們支持創(chuàng)建"SilverLight應用程序"和"SilverLight類庫"兩種類型的工程文件。下面我們以"SilverLight類庫"類型的工程類創(chuàng)建我們的Widget<MyFirstWidget>。 然后修改工程的屬性: 修改"Silverlight"頁的"默認命名空間"為"". 在"生成事件"頁的"后期生成事件命令行"中添加下面的語句:copy$<TargetPath>$<SolutionDir>SilverlightViewer.Web\ClientBin\widgetscopy$<ProjectDir>$<TargetName>.xml$<SolutionDir>SilverlightViewer.Web\ClientBin\widgets然后添加SilverLightViewer引用最后保存工程。我們馬上可以創(chuàng)建自己的Widget了。創(chuàng)建新的Widget首先創(chuàng)建一個新的SilverLight用戶控件,命名為MyFirstWidget。修改MyFirstWidget.xaml文件替換UserControl為slv:BaseWidget增加xmlns:slv=修改MyFirstWidget.xaml.cs文件替換UserControl為BaseWidget然后使用WidgetPanel作為內(nèi)容模板,增加我們所需要顯示控件,如:TextBox。<slv:WidgetPanelWidgetWidth="400"WidgetHeight="200"><slv:WidgetPanel.Content><Grid><TextBlockx:Name="myInfo"Text="MyFirstWidget"Margin="15"Foreground="White"/></Grid></slv:WidgetPanel.Content></slv:WidgetPanel>這樣我們的第一個Widget基本完成了。添加Widget配置文件處理本節(jié)介紹如何創(chuàng)建和使用Widget的配置文件。首先,我們創(chuàng)建一個空白的MyFirstWidget.xml文件,增加下面的內(nèi)容:<?xmlversion="1.0"?><configuration><info>我的第一個Widget!</info></configuration>然后在widget中增加配置文件處理事件及處理內(nèi)容:MyFirstWidget.xaml<slv:BaseWidgetWidgetConfigEvent="BaseWidget_WidgetConfigEvent">MyFirstWidget.xaml.csusingSystem.Xml.Linq;privatevoidBaseWidget_WidgetConfigEvent<objectsender,AppEvente>{XElementxmlElement=<XElement>e.Data;this.myInfo.Text=xmlElement.Element<"info">.Value;}配置運行Widget修改全局配置文件<Confing.xml>的widgets標簽段,增加下面的一行:<widgetlabel="MyFirstWidget"preload="false"headless="false"icon="assets/images/icons/i_home.png"type=""config="widgets/MyFirstWidget.xml">widgets/MyFirstWidget.dll</widget>運行,看下效果!自定義Widget界面<UI> 使用SilverLight的Style和Template技術〔可使用Blend或VS2010生成,我們可以的定制自己WIdget的UI界面。我們以myFirstWidget為例。MyFirstWidget.xaml<slv:BaseWidget.Resources><Stylex:Key="myPanel"TargetType="Rectangle"><SetterProperty="RadiusX"Value="5"/><SetterProperty="RadiusY"Value="5"/>……</Style><Stylex:Key="myTitlePanel"TargetType="Rectangle"><SetterProperty="RadiusX"Value="5"/><SetterProperty="RadiusY"Value="5"/>……</Style><Stylex:Key="myTitle"TargetType="TextBlock"><SetterProperty="FontFamily"Value="Arial,SimSun"/>……</Style><Stylex:Key="myWidgetPanel"TargetType="slv:WidgetPanel"><SetterProperty="Template"><Setter.Value><ControlTemplateTargetType="slv:WidgetPanel"><Gridx:Name="LayoutRoot"Margin="20"><vsm:VisualStateManager.VisualStateGroups><vsm:VisualStateGroupx:Name="WidgetStateGroup"><vsm:VisualStatex:Name="Maximized">……</vsm:VisualState><vsm:VisualStatex:Name="Minimized">……</vsm:VisualState><vsm:VisualStatex:Name="Closed">……</vsm:VisualState></vsm:VisualStateGroup></vsm:VisualStateManager.VisualStateGroups><RectangleStyle="{StaticResourcemyPanel}"/><Gridx:Name="widgetPanel">……<Gridx:Name="widgetContent"><ContentPresenterContent="{TemplateBindingContent}"/></Grid></Grid></Grid></ControlTemplate></Setter.Value></Setter></Style></slv:BaseWidget.Resources><slv:WidgetPanelWidth="400"Height="200"Style="{StaticResourcemyWidgetPanel}"WidgetClosedEvent="WidgetPanel_WidgetClosedEvent"WidgetMaximizedEvent="WidgetPanel_WidgetMaximizedEvent><slv:WidgetPanel.Content><Grid><TextBlockx:Name="myInfo"Margin="15"HorizontalAlignment="Center"/></Grid></slv:WidgetPanel.Content></slv:WidgetPanel>運行效果如下:使用外部參數(shù)在Web項目中我們經(jīng)常會使用頁面參數(shù)來傳遞參數(shù)進行初始化或信息傳遞,此框架中,我們使用.ExterParas輔助類可以輕松獲得頁面?zhèn)鬟f來的參數(shù),甚至可以增加和修改參數(shù)。獲得指定參數(shù)示例: Stringconfig=ExterParas.Parameters["config"];使用特定的全局配置文件 SilverLightViewer框架支持指定特定的主配置文件〔默認為config.xml,用戶可通過在Url地址后增加Config參數(shù)來指定增。如:http://severname/SilverlightViewerTestPage.html?config=config-classic.xml使用自定義圖形光標 由于silverLight的系統(tǒng)光標很有限,我們在框架中提供了一個自定義圖形光標輔助類<.CustomImageCursors>,我們可以輕松的擴展SilverLight

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論