版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SilverLightViewer开发人员指南丁海二〇一〇年八月目录简述 2背景 2术语和定义 2GIS(地理信息系统) 2GPS(全球卫星定位系统) 2RIA(富因特网应用程序) 3Flex 3SilverLight 4开发环境 4必备知识 4SilverLightViewer开发框架 5概述 5系统框架图 6开发人员指南 7WidgetFramework基础 7系统配置文件 11系统常用事件(AppEvent) 17开发自己的Widget 25使用外部参数 34使用自定义图形光标 35附录I:Widgets介绍 35主控窗口(ViewerControllerWidget) 35HeaderController 35ClassicController 36图层切换(MapSwitcherWidget) 38鹰眼(OverviewMapWidget) 39书签(BookmarkWidget) 40附录II:常见问题 41使用跨域访问配置文件(clientaccesspolicy.xml) 41
简述本文档用于帮助开发人员使用SilverLightViewer框架,开发基于ArcGISforSilverlight/WPFAPI2.0的RIA地图应用。背景ESRI发布了ArcGISSilverLightAPI等快速Web开发包,受到了广大用户及开发商的关注。但一直以来开发商和用户都只是使用在线的文档及零散的在线例子,开发商或用户准备使用ArcGISSilverLightAPI进行开发的时候,总是感到无从下手。基于以上原因,本方案旨在为客户提供一个可扩展、移植的SilverLightAPI开发框架,并向用户展示ArcGISSilverLightAPI的功能及魅力。术语和定义GIS(地理信息系统)地理信息系统(GeographicInformationSystem,简称GIS)是建立在地球科学基础上的边缘科学,是以地理空间数据库为基础,在计算机软硬件的支持下,对空间相关资料进行采集、管理、操作、查询分析、模拟、显示和制图输出,并采用地理模型分析方法,适时提供多种空间和动态的地理信息,为地理研究和地理决策服务而建立起来的计算机技术系统。是融地理学、几何学、计算机科学及各类应用对象为一体的综合性高新技术。GPS(全球卫星定位系统)GPS是全球卫星定位系统(GlobalPositioningSystem,GPS)的英文缩写,GPS利用导航卫星进行测时和测距,以构成全球定位系统,能提供个人候的定位、授时、测速功能。GPS是一种精密的卫星导航系统。该系统由24颗绕地球旋转的卫星组成,卫星连续不断地发送位置和时间信息。这些卫星均匀地分布在6个轨道上,每个轨道有4颗卫星。地面GPS接收机可接收5到12颗卫星信号。为实现地面定位功能,GPS接收机至少需要接收4个卫星信号,其中3个信号用来计算GPS接收机的纬度、经度和海拔高度,第四个信号提供同步时间校准。RIA(富因特网应用程序)RIA是RichInternetApplication的简称,也称富因特网应用程序,是由Macromedia(现Adobe)最先提示的概念,以示与传统Web应用程序相区别。自从B/S架构迅速流行开来之后,我们就一直面临着这样一个问题:如何做到当初C/S那样的表示层精确控制以及良好的用户体验?当然,大量的利用DHTML以及JavaScript我们可以实现接近C/S时代的表示层控制和展现,比如Bindows,但是我们需要付出比C/S时代更多的人力物力才能做到接近于C/S客户端的表现方式,这不是我们想要的。在我们从当初狂热的B/S浪潮中逐渐冷静下来的时候,我们发现单纯的瘦客户端/胖服务器模式并非是一个万能的模式-世间能量终究是守恒的,有得必有失,我们在获得了B/S带来的种种好处之后,也同样失去了C/S带给我们的帮助,因此RIA(RichInternetApplications)的出现就显得极其自然了。RIA意味: 不同凡响的Web功能、更好的用户体验、更强大的用户界面、更好的交 互性、更先进的开发模型、更强大的多媒体功能、更好的数据管理、更好的 程序控制目前RIA开发的技术主要有,AdobeFlex、Ajax、WPF、OpenLaszlo、GoogleWebToolkit、JavaSWT、XUL、JavaFX、Silverlight。Flex随着当今信息技术飞速发展和Internet带宽的增加,传统的文字+图片的方式已经不能满足人们对Web内容的需要。随着Web2.0的概念越来越深入人心,Flex技术作为RIA技术的领航者已经快速的发展到了第三个版本Flex3.0。Flex技术是完全基于矢量图形技术的,这样使得用户能够获得更多的用户体验。只要浏览器可以播放Flash,就可以显示Flex的网站。由于FlashPlayer的高市场占有率,基于Flex的RIA技术已经逐渐成为Web2.0开发的主要技术手段。Flex的定位是提供丰富Internet应用的企业级开发框架。轻便的开发模式和良好的服务端兼容性使得Flex已经成为主流的网站和电子商务的发展方向。SilverLightSilverlight是微软推出的一个跨平台跨操作系统的插件,使Web开发者能够在浏览器中建造丰富的媒体体验和RIA应用。可用于Windows平台上的IE和Firefox浏览器,以及MacOSX平台上的Firefox和Safari浏览器。Silverlight是一种新的Web呈现技术,能在各种平台上运行。借助该技术,您将拥有内容丰富、视觉效果绚丽的交互式体验,而且,无论是在浏览器内、在多个设备上还是在桌面操作系统(如AppleMacintosh)中,您都可以获得这种体验。支持创建3D模型、可以更轻松的现实视频播放和分享的播放器一类的东西,支持搜索引擎。开发环境 WindowsXp/2003/2008/7IISMicrosoftVisualStudio2010MicrosoftExpressionBlend4SilverLight4Silverlight_4_ToolkitSilverLightToolsforVisualStudio2010ArcGISforSilverlight/WPFAPI2.0SilverLightViewer1.0必备知识熟练使用VisualStudio开发SilverLight(C#或VB)熟悉ArcGISforSilverlight/WPFAPISilverLightViewer开发框架概述 SilverLightViewer开发框架帮助开发人员,快速的开发和部署基于ArcGISforSilverlight/WPFAPI2.0的RIA地图应用。 SilverLightViewer开发框架有以下特点:轻松配置,以满足客户业务需求和要求通过Widget来实现各种功能,提供许多核心的Widget如:图层管理、鹰眼等轻松扩展,可根据自己的业务需求,轻松的编写或下载widgetsWidgets采取按需下载管理模式,最小化服务器网络负载。类似于ArcGISViewerforFlex系统框架图
开发人员指南WidgetFramework基础Widget是被封装在一起的一段或一组孤立的可执行代码,它实现了用户的一种或一组功能或业务逻辑(包括可视化的界面)。对于面向服务的应用,Widget甚至可以是一个服务(数据、业务流程等)。用户可以轻松的执行这个Widget。同时Widget也支持被共享和重用。IBaseWidget接口(IBaseWidget.cs)定义了Widget的一系列通用接口,会被WidgetManager调用。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都继承自这个基类。它实现了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中被调用的接口。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开发人员可以花更多的他们对自己的核心业务需求的开发时间。开发人员可以自定义自己的widget模板,一定要实现IWidgetPanel接口。一些通用的方法:publicvirtualvoidaddTitlebarButton(Stringicon,Stringtip,MouseButtonEventHandlermouseLeftButtonDown);一些通用的事件:publiceventEventHandlerWidgetMinimizedEvent;(最小化事件)publiceventEventHandlerWidgetMaximizedEvent;(最大化事件)publiceventEventHandlerWidgetClosedEvent;(关闭事件)
Widget界面元素titleBartxtTitleimgIcontitleBartxtTitleimgIconwidgetPanelContent widgetPanelContentLayoutRootLayoutRoot界面元素嵌套关系如下图:
WidgetBarWidget和WidgetBarWidgetBar Widget控制条WidgetWidget控制条WidgetWidget:接受WidgetContorl管理。WidgetBar:不受WidgetContorl管理。系统配置文件 我们可以通过修改配置文件,轻松完成系统界面的定制。全局配置文件(默认为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可拖动、调整大小<map>标签段定义Map相关的信息,<Map>标签段包括下面的一些属性: initialExtent:安装时地图显示的区域(XMinYMinXMaxYMax)fullExtent:地图显示的最大区域(XMinYMinXMaxYMax)left:地图距离最左边的距离right:地图距离最右边的距离top:地图距离最上边的距离bottom:地图距离最下边的距离还包含下面的标签段: <basemaps>:定义背景地图信息,包含mapservice标签段 <mapservice>:定义一个地图服务信息,包含下面的一些属性及值域 Label:地图服务的标题名type:地图服务类型(tiled\dynamic\virtualearth\image)visible:地图服务的可见性token:token串alpha:透明度icon:地图服务的图标style:图层风格(Road、Aerial、AerialWithLabels)(只适用于virtualearth)值域:地图服务的访问地址<operationallayers>:定义操作地图信息,包含layer标签段 <layer>:定义一个操作图层信息,包含下面的一些属性及值域 Label:图层的标题名type:图层的类型(tiled\dynamic\feature)visible:图层的可见性token:token串alpha:透明度icon:图层的图标值域:图层的访问地址<widgets>标签段 定义Widgets的信息。包含多个<widget>标签段 <widget>:定义一个Widget的信息,包含下面的属性及值域 Label:Widget的标题名icon:Widget的图标type:Widget的类名(创建Widget时使用)preload:启动应用系统时是否自动加载(true/false)config: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的类名(创建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需要的配置信息,配置文件格式及内容由Widget自己处理(开发人员在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;}}系统常用事件(AppEvent) 定义了一些列系统常用的事件,包含在AppEvent.cs文件中。使用监听和发起系统事件必须使用ViewerContainer全局类。 监听事件例子:ViewerContainer.addEventListener(AppEvent.CONTAINER_INITIALIZED,newViewerEventHandler(containerInitialized)); 触发事件例子:ViewerContainer.dispatchEvent(AppEvent.WIDGET_RUN,newAppEvent(ItemId));APP_ERROR 应用程序出错事件,在应用程序出错时触发。AppEvent类的data属性为字符串类型。 触发事件示例: Stringdata=“出错了!”;ViewerContainer.dispatchEvent(AppEvent.APP_ERROR,newAppEvent(data));CONFIG_LOADED 系统全局配置文件加载成功后,触发事件。AppEvent类的data属性为ConfigData类型实例。 监听事件示例: ViewerContainer.addEventListener(AppEvent.CONFIG_LOADED,newViewerEventHandler(ConfigLoaded));privatevoidConfigLoaded(objectsender,AppEvente){ ……}MAP_LOADED 地图控件加载成功时触发的事件。AppEvent类的data属性为ESRI.ArcGIS.Client.Map类型实例。 监听事件示例: 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":下边的空白距离 触发事件示例: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 基础地图图层加载成功时触发的事件。AppEvent类的data属性为Null。 监听事件示例: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) 触发事件示例: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);触发事件示例: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标识;触发事件示例:ViewerContainer.dispatchEvent(AppEvent.WIDGET_RUN,newAppEvent(id));WIDGET_BROADCAST Widget的广播事件,所有Widget都默认收到该事件。AppEvent类的data属性为Dictionary<string,Object>类型实例,内容自定;触发事件示例: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可调用setMapNavigation(StringnavMethod,Stringstatus)方法触发该事件。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":当前状态信息 触发事件示例: setMapNavigation("pan","移动");SET_MAP_ACTION 用于获得地图画图操作的事件所有Widget可调用setMapAction(stringaction,stringstatus,EventHandler<DrawEventArgs>callback)方法触发该事件。AppEvent类的data属性为Dictionary<string,Object>类型实例,包含以下的元素:"tool":当前画图方法,主要包含: point画点(DrawMode.Point)rectangle画矩形(DrawMode.Rectangle)polyline画线(DrawMode.Polyline)polygon画多边形(DrawMode.Polygon)freehand手画(DrawMode.Freehand)"status":当前状态信息"handler":drawEnd事件句柄触发事件示例:setMapAction(value,status,drawEnd);privatevoiddrawEnd(objectsender,DrawEventArgse){……}DATA_PUBLISH发布新的共享数据的事件,所有Widget可调用addSharedData(stringkey,List<object>list)方法触发该事件。AppEvent类的data属性为Dictionary<string,Object>类型实例,内容为:数据标识1:数据内容……数据标识n:数据内容 触发事件示例:Dictionary<string,Object>data=newDictionary<string,object>();data.Add(key,this);ViewerContainer.dispatchEvent(AppEvent.DATA_PUBLISH,newAppEvent(data)); 监听事件示例: ViewerContainer.addEventListener(AppEvent.DATA_PUBLISH,newViewerEventHandler(datapublish));privatevoiddatapublish(objectsender,AppEvente){ ……}DATA_NEW_PUBLISHED当新的数据被加到共享数据池时触发的事件。AppEvent类的data属性为Dictionary<string,Object>类型实例,内容为:数据标识1:数据内容……数据标识n:数据内容 监听事件示例: ViewerContainer.addEventListener(AppEvent.DATA_NEW_PUBLISHED,newViewerEventHandler(datanewpublish));privatevoiddatanewpublish(objectsender,AppEvente){ ……}DATA_FETCH_ALL发出获得所有共享数据池中数据申请的事件,事件将会触发DATA_SENT事件,所有Widget可调用fetchSharedData()方法触发该事件。AppEvent类的data属性为null 触发事件示例: this.fetchSharedData(); DATA_FETCH发出获得指定共享数据池中数据申请的事件,事件将会触发DATA_SENT事件。AppEvent类的data属性为Dictionary<string,Object>类型实例,内容为:数据标识1:数据内容……数据标识n:数据内容 触发事件示例: Stringkey=“key1”;ViewerContainer.dispatchEvent(AppEvent.DATA_FETCH,newAppEvent(key));DATA_SENT由共享数据池发出的响应数据查看申请(DATA_FETCH、DATA_FETCH_ALL)的事件。AppEvent类的data属性为Dictionary<string,Object>类型实例,内容为:数据标识1:数据内容……数据标识n:数据内容 监听事件示例: ViewerContainer.addEventListener(AppEvent.DATA_SEND,newViewerEventHandler(datasend));privatevoiddatasend(objectsender,AppEvente){ ……}SHOW_INFOWINDOW显示信息窗口事件,所有Widget可调用showInfoWindow(Dictionary<string,Object>)方法触发该事件。AppEvent类的data属性为Dictionary<string,Object>类型实例,包含以下的元素:"icon":信息的图标"title":信息的标题内容"link":信息的链接信息"point":信息在图上显示的位置(ESRI.ArcGIS.Client.Geometry.MapPoint)"geometry":信息对应的几何元素(ESRI.ArcGIS.Client.Geometry) 触发事件示例:Dictionary<string,Object>infodata=newDictionary<string,Object>(); this.showInfoWindow(infodata); 关闭信息窗口示例: this.showInfoWindow(null);
开发自己的Widget 这节将给大家介绍如何创建自己的Widget,当然首先我们要安装好开发环境。然后在VS2010中打开解决方案(SilverlightViewer)。创建新的工程首先我们在VS2010创建一个新的工程,我们支持创建”SilverLight应用程序”和”SilverLight类库”两种类型的工程文件。下面我们以”SilverLight类库”类型的工程类创建我们的Widget(MyFirstWidget)。 然后修改工程的属性: 修改“Silverlight”页的“默认命名空间”为“ESRI.SilverlightViewer.Widgets”. 在“生成事件”页的“后期生成事件命令行”中添加下面的语句: copy$(TargetPath)$(SolutionDir)SilverlightViewer.Web\ClientBin\widgetscopy$(ProjectDir)$(TargetName).xml$(SolutionDir)SilverlightViewer.Web\ClientBin\widgets然后添加SilverLightViewer引用最后保存工程。我们马上可以创建自己的Widget了。创建新的Widget 首先创建一个新的SilverLight用户控件,命名为MyFirstWidget。修改MyFirstWidget.xaml文件替换UserControl为slv:BaseWidget增加xmlns:slv=/arcgis/silverlightviewer/2010修改MyFirstWidget.xaml.cs文件替换UserControl为BaseWidget然后使用WidgetPanel作为内容模板,增加我们所需要显示控件,如: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配置文件处理本节介绍如何创建和使用Widget的配置文件。首先,我们创建一个空白的MyFirstWidget.xml文件,增加下面的内容: <?xmlversion="1.0"?><configuration> <info>我的第一个Widget!</info></configuration>然后在widget中增加配置文件处理事件及处理内容: 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="ESRI.SilverlightViewer.Widgets.MyFirstWidget"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>运行效果如下:使用外部参数 在Web项目中我们经常会使用页面参数来传递参数进行初始化或信息传递,此框架中,我们使用ESRI.SilverlightViewer.utils.ExterParas辅助类可以轻松获得页面传递来的参数,甚至可以增加和修改参数。 获得指定参数示例: Stringconfig=ExterParas.Parameters["config"];使用特定的全局配置文件 SilverLightViewer框架支持指定特定的主配置文件(默认为config.xml),用户可通过在Url地址后增加Config参数来指
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年二手住宅交易授权协议2篇
- 2024年居间服务协议法律解释要点版B版
- 2024年期工地领班聘用协议模板
- 2024年度安装维修合同标的及设备要求3篇
- 2024版影视制作发行合同(含分成)3篇
- 2024年房产查封登记协议2篇
- 2024年度五保户政府供养责任合同版
- 2024办公室文员聘用、培训、晋升及解聘条款的正式劳动合同
- 2024年农产品代理销售与市场渠道拓展协议3篇
- 2024协同助力中小企业财政补贴合同版B版
- 飞秒激光加工技术ppt课件(PPT 31页)
- 2020-2021学年广东省广州市天河区五年级上学期期末考试数学模拟试卷及答案解析
- 【双减资料】-双减背景下高效课堂教学实践研究课题总结结题报告
- 李震-数据中心节能关键技术研究PPT通用课件
- 中药饮片入库验收操作规程
- 结构力学——静定梁
- 正体五行择法
- 山东省济南市高新区2021-2022学年上学期八年级期末生物试卷(附答案)
- 很牛的ppt(获奖作品)
- 幼儿园中班健康领域活动《保护牙齿》.ppt
- 慢性阻塞性肺病健康的知识讲座记录表
评论
0/150
提交评论