在DeepEarth内部提供了6个地图扩展控件(CoordControl、ScaleControl、NavControl、MapControl、MouseControl、ZoomSliderControl)为我们提供了相对比较规范、完善的编程模型,通过他们可进一步的增强地图的操作灵活性等,还可通过扩展开发出许多功能强大的扩展程序。本篇主要以DeepEarth内置控件中的最常用的几个控件为主题探索DeepEarth内置控件的使用方法。
在探索DeepEarth内置控件的使用方法之前先了解下内置控制的基本结构,DeepEarth定义了MapControl控件基类,CoordControl、ScaleControl、NavControl、MouseControl都是通过继承MapControl扩展而来,如下UML图所示:
MapConotrol继承了Silverlight的ContentControl类并实现了DeepEarth的ILayer接口,在整个DeepEarth的扩展开发中提供了基础的编程模型,通过其他源代码可以知道:
MapControl源代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->1publicclassMapControl:ContentControl,ILayer
2{
3///<summary>
4///ProtectedbackingfieldfortheMapInstanceproperty
5///</summary>
6protectedMap_Map;
7
8#regionILayerMembers
9
10///<summary>
11///AccesstoinstanceoftheMapforthislayer.
12///</summary>
13publicvirtualMapMapInstance
14{
15get
16{
17if(_Map==null)
18{
19_Map=Map.GetMapInstance(this);
20}
21
22return_Map;
23}
24set
25{
26if(ReferenceEquals(_Map,value))
27{
28return;
29}
30
31_Map=value;
32}
33}
34
35///<summary>
36///AuniqueIDtoidenitifythelayer
37///</summary>
38publicstringID{get;set;}
39
40///<summary>
41///IndicateswhethertheLayerisvisibletotheuser.
42///</summary>
43publicboolIsVisible{get;set;}
44
45#endregion
46}
47}
CoordControl在DeepEarth中被定义为呈现地图鼠标锁在坐标系数和当前地图缩放级别的控件,其使用非常简单。
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--><DeepControls:CoordControlTextOptions.TextHintingMode="Fixed"></DeepControls:CoordControl>
ScaleControl在DeepEarth中被定义为呈现地图显示尺寸比例的控件,使用同CoordControl一样的简单,通常就是设置其他显示在地图控件的位置属性。
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--><DeepControls:ScaleControlVerticalAlignment="Bottom"HorizontalAlignment="Right"Margin="12,12,12,40"/>
在这几个内置扩展控件中,使用率最高的就是导航控件NavControl,NavControl控件为实现地图导航功能提供了完善的开发模型,只需要简单的配置就可以扩展出不同的功能导航菜单,基本使用方法如下代码块:
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--><DeepControls:NavControlx:Name="deepNavControl"RotationOn="True"/>
通过所提供的编程模型可扩展出适合自己需要的任何效果功能导航菜单,比如加上快速导航按钮实现快速定位到指定的城市地图等:
代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--><DeepControls:NavControlx:Name="deepNavControl"RotationOn="True">
<StackPanelOrientation="Horizontal"Height="40">
<Buttonx:Name="btnFull"Click="btnFull_Click"Style="{StaticResourceStandardButton}"ToolTipService.ToolTip="全屏显示">
<Imagex:Name="imgFull"Source="../Images/FullScreen.png"></Image>
</Button>
<Buttonx:Name="btnRefresh"Click="btnRefresh_Click"Style="{StaticResourceStandardButton}"ToolTipService.ToolTip="刷新地图">
<Imagex:Name="imgRefresh"Source="../Images/Refresh.png"></Image>
</Button>
<Buttonx:Name="btnBeiJing"Click="btnBeiJing_Click"Style="{StaticResourceStandardButton}"
ToolTipService.ToolTip="导航到北京"Content="北京"/>
<Buttonx:Name="btnShangHai"Click="btnShangHai_Click"Style="{StaticResourceStandardButton}"
ToolTipService.ToolTip="导航到上海"Content="上海"/>
</StackPanel>
</DeepControls:NavControl>
如上图示,要实现功能导航菜单项的功能直接针对相应的Button的Click事件编写实现代码既可,比如说我想要实现全屏与非全屏的切换显示,以及实现点击北京后将地图导航定位到北京的地图,那么可如下实现:
代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->privatevoidbtnFull_Click(objectsender,RoutedEventArgse)
{
Application.Current.Host.Content.IsFullScreen=!Application.Current.Host.Content.IsFullScreen;
}
privatevoidbtnBeiJing_Click(objectsender,RoutedEventArgse)
{
LocationMap(116.3895,39.9054,9);
}
///<summary>
///根据经度和纬度定位系统到指定的级别
///</summary>
///<paramname="longitude"></param>
///<paramname="latitude"></param>
///<paramname="zoom"></param>
privatevoidLocationMap(doublelongitude,doublelatitude,doublezoom)
{
mapInstance.SetViewCenter(newPoint(longitude,latitude),zoom);
}
除了上面的这种实现方式来扩展导航功能菜单外,我们也可以通过一个Silverlight用户控件来封装导航菜单。实现非常简单,将原始被直接编码在NavControl中的元素移置到用户控件中就OK了,如下自定义的功能导航菜单的Silverlight用户控件代码:
代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--><UserControlx:Class="DETraining.Controls.ToolBarControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Gridx:Name="LayoutRoot">
<StackPanelOrientation="Horizontal"Height="40">
<Buttonx:Name="btnFull"Click="btnFull_Click"Style="{StaticResourceStandardButton}"ToolTipService.ToolTip="全屏显示">
<Imagex:Name="full"Source="../Images/FullScreen.png"/>
</Button>
<Buttonx:Name="btnRefresh"Click="btnRefresh_Click"Style="{StaticResourceStandardButton}"ToolTipService.ToolTip="刷新地图">
<Imagex:Name="imgRefresh"Source="../Images/Refresh.png"></Image>
</Button>
<Buttonx:Name="btnBeiJing"Click="btnBeiJing_Click"Style="{StaticResourceStandardButton}"
ToolTipService.ToolTip="导航到北京"Content="北京"/>
<Buttonx:Name="btnShangHai"Click="btnShangHai_Click"Style="{StaticResourceStandardButton}"
ToolTipService.ToolTip="导航到上海"Content="上海"/>
<Buttonx:Name="btnWuHan"Click="btnWuHan_Click"Style="{StaticResourceStandardButton}"
ToolTipService.ToolTip="导航到湖北"Content="湖北"/>
</StackPanel>
</Grid>
</UserControl>
和直接在NavControl你编码扩展一样,直接给对应的Button的Click事件实现其相应的功能就OK。如此一来,在调用的地方就非常简单了,通过用户控件将扩展的功能导航菜单封装起来,原先复杂的编码现在仅仅只需要一行代码就可以实现,其他的事情交给自定义用户控件去完成。
代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--><DeepControls:NavControlx:Name="deepNavControl"RotationOn="True">
<StackPanelOrientation="Horizontal"Height="40">
<tb:ToolBarControl/>
</StackPanel>
</DeepControls:NavControl>
MouseControl主要用于控制地图界面的拖拽行为等,ZoomSliderControl用于控制地图缩放级别,这两个控件使用和前面的CoordControl差不多,本篇暂不做介绍,在以后的相关篇幅里在来讨论它的相关功能和特性。
分享到:
相关推荐
在DevExpress的布局控件(LayoutControl)中,有时候用户可能会遇到一个常见的问题,即在内置的控件上无法通过鼠标滚轮触发滚动行为。这可能是由于默认的事件处理或控件设置导致的。本文将深入探讨这个问题,并提供17...
本资源包含的是MapXtreme内置控件的源代码,这对于深入理解和自定义MapXtreme的应用是非常有价值的。 MapXtreme的核心特性包括地图渲染、地理编码、空间分析以及数据管理等。其内置控件是预先封装好的功能模块,...
标题中的"C#开发 3dsmax 插件 内置控件"指的是使用C#编程语言来创建3ds Max软件的插件,并且这个插件包含有内置的用户界面控件,这些控件允许用户与插件进行交互,实现自定义功能。3ds Max是一款强大的三维建模、...
在这个特定的案例中,我们关注的是如何“快速提取Excel内置系统控件图标”。 Excel内置了大量的系统控件,这些控件通常用于创建交互式的用户界面,如按钮、复选框、选项按钮等。它们的图标是经过精心设计的,以直观...
Web控件和验证控件是ASP.NET开发网页应用的核心组件,它们在构建交互式、用户友好的Web应用程序中起着至关重要的作用。...在实践中不断探索和实验,能帮助开发者更好地利用这些工具构建出满足业务需求的高效Web应用。
"C#自定义控件库"是指使用C#语言编写的、由开发者自定义的控件集合,这些控件可以扩展.NET Framework的标准控件集,为用户提供更丰富的界面元素和功能。自定义控件是软件开发中的一个重要环节,特别是在UI设计和用户...
除了内置控件,WebForm也支持使用第三方控件,例如jQuery UI的`datepicker`插件。这种情况下,我们需要引入jQuery库和对应的插件资源,然后在HTML元素上添加适当的属性(如`data-role="date"`)来激活日期选择功能。...
在.NET框架下,C#作为主流的编程语言之一,提供了丰富的内置控件供开发者使用。然而,为了满足更个性化、更美观的用户界面需求,许多开发者会转向使用第三方控件。这些控件往往具备更多功能,更精细的样式设置,以及...
在.NET框架下,VB.NET提供了一系列内置控件,同时还有第三方库扩展了这些基础控件的功能,为开发者提供了更多设计选项。本文将深入探讨如何利用VB.NET及其相关的.NET控件来创建出引人注目的用户界面,并介绍一些可能...
基本控件是VB内置的,如按钮(Button)、文本框(TextBox)、标签(Label)、复选框(CheckBox)、单选按钮(RadioButton)等,它们满足了大多数常见应用的需求。ActiveX控件是可插入到VB项目中的外部组件,例如Web...
在VB.NET编程环境中,控件是构建用户界面(UI)的核心元素,它们允许开发者创建具有交互性和视觉吸引力的软件应用程序。...不断探索和理解各种控件的功能、事件和使用场景,将有助于提升编程技能,满足不同项目的需求。
在C#编程中,动态改变控件的位置、大小以及实现拖动功能是常见的需求,尤其在设计用户界面(UI)时。以下将详细介绍如何通过C#实现这些功能,并结合提供的"Panel"控件来举例说明。 1. **控件位置的动态改变**: 在...
通过这种方式,开发者可以克服易语言内置控件的局限性,利用微软的成熟技术,提供更加完善的浏览体验。这种控件的使用不仅适用于简单的网页浏览,还可以应用于各种需要内嵌Web界面的应用,如在线表单填写、网页游戏...
GridView控件可以自动绑定到数据源控件,并提供了内置的排序、分页和更新功能。 GridView控件的主要特点包括: * 支持自动绑定到数据源控件 * 提供了内置的排序、分页和更新功能 * 可以自定义列和样式 * 可以使用...
4. **丰富的内置控件**:ASP.NET提供了一系列内置的服务器控件,如按钮、文本框、下拉列表、表格、图像、验证控件等,它们具有多种预定义的样式和行为,可以快速构建功能丰富的界面。 5. **自定义控件**:除了内置...
同时,熟悉Android SDK提供的各种内置控件,理解它们的工作原理,将有助于我们更好地进行定制。此外,熟练运用属性动画和视图状态等高级特性,可以提升自定义控件的交互性和视觉效果。 总之,Android自定义控件是...
解决layui复选框等内置控件不显示的问题 在使用layui框架开发网页界面时,开发者经常会遇到一些内置控件无法正常显示的问题。复选框(checkbox)作为常用的表单元素,其显示问题经常困扰着开发者。本文将详细说明...
在.NET框架中,C#是一种常用的编程语言,用于开发各种应用程序,包括Web应用程序。在创建交互式的用户界面时,验证控件是不可或...通过实践和调试,你可以进一步探索和优化这些控件的配置,以适应各种各样的验证场景。
WinForm是一种.NET Framework提供的用于构建桌面应用程序的工具,它包含了多种内置控件,如按钮、文本框等。然而,通过使用开源控件,开发者可以进一步提升应用界面的设计水平,使其更加专业和个性化。 提到的...
在IT行业中,尤其是在工业自动化和监控系统开发领域,自定义控件扮演着至关重要的角色。本文将深入探讨“C#工业控件集合”,一个专为工业应用设计的自定义控件库,它包含了丰富的可视化元素,如图表、温度计和仪表盘...