学习使用Bing Maps Silverlight Control(六):自定义“鹰眼”地图
8 “鹰眼”地图
在电子地图中,用于显示当前窗口在全图中的位置,当前窗口换图时,鹰眼自动进行相应变化。鹰眼进行漫游。通过改变鹰眼中窗口位置可改变相应的主窗口地图显示区域。——百度百科
实现鹰眼地图实际上就是一个小尺寸的Bing Maps控件,并利用 7 自定义显示范围 中的自定义Map Mode 限制地图的缩放级别和显示范围。
首先,自定义一个适用于小尺寸地图显示的Mode,通过继承并限制ChinaMode的缩放级别来达到小地图的效果:
/// <summary> /// 中国地图的小地图模式 /// </summary> public class ChinaMiniMode : ChinaMode { public ChinaMiniMode() { base.MapZoomRange = new Range<double>(4, 4); } }
然后,向正常的地图控件中添加一个小尺寸的地图控件。
以下是前台界面xaml代码:
<!--主地图-->
<c:OfflineMap Name="map" AnimationLevel="UserInput" > <c:OfflineMap.Mode><!--自定义的地图模式--> <c:ChinaMode></c:ChinaMode> </c:OfflineMap.Mode><!--小地图的容器--> <Canvas x:Name="cMiniMap" Width="200" Height="200" Margin="0,5,5,0" HorizontalAlignment="Right" VerticalAlignment="Top" > <!--小地图--> <c:OfflineMap x:Name="MiniMap" Width="200" Height="200" NavigationVisibility="Collapsed" ScaleVisibility="Collapsed" LogoVisibility="Collapsed" CopyrightVisibility="Collapsed" Center="{Binding Center, ElementName=map, Mode=TwoWay}" ZoomLevel="{Binding ZoomLevel, ElementName=map, Mode=TwoWay}" AnimationLevel="UserInput" MouseWheel="MiniMap_MouseWheel"> <c:OfflineMap.Mode> <!--小地图的地图模式--> <c:ChinaMiniMode></c:ChinaMiniMode> </c:OfflineMap.Mode> </c:OfflineMap> <!--矩形外圈--> <Rectangle Width="200" Height="200" Stroke="#FFBB00" StrokeThickness="4" Margin="0,0,0,0" /> <!--中心圆点--> <Ellipse Height="5" Width="5" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="98,98,0,0" Fill="#FFBB00" /> </Canvas></c:OfflineMap>
其中的MiniMap就是要添加的小尺寸控件,将其宽高固定在了200x200像素,隐藏掉了所有的附加图层,把两个地图的动画效果都设定为动画效果(AnimationLevel)在用户输入(UserInput)时产生,目的是为了两个地图在进行同步移动时更加流畅,同时避免不必要的动画效果(同时也会失去设置视野时的动画效果)。两个地图的视野同步时通过数据绑定完成的,对两个地图的Center和ZoomLevel进行了双向绑定。
因为小地图只限制了一级缩放,所以把小地图的滚轮屏蔽掉(不屏蔽在滚动时会发生漂移):
“鹰眼”地图最终效果如下(右上角)://不允许在小地图上使用滚轮 private void MiniMap_MouseWheel(object sender, MouseWheelEventArgs e) { e.Handled = true; }
(以上内容部分参考自:http://www.cnblogs.com/beniao/archive/2010/03/18/1688863.html,请访问原博客查看更多内容。)
输了你,赢了世界又如何...
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!