因工作需要,最近想开发一个网络地图下载器,在编码的过程中想到以前谷歌、百度和现在的天地图、ArcGIS里面有一个地图导航控件,就尝试着自己做了一个。其实原理也简单,上下两个按钮,中间一个可上下移动的按钮,下面按钮缩小,上面按钮放大,中间跟随移动或鼠标按住上下拖动。先上图,我做出来的效果是这样的:
这里面还有一个地方要注意,就是导航控件和地图的交互同步,缩放地图时导航控件中间的按钮要跟随上下移动,同样的操作导航控件时,地图要缩放到对应比例级别。
回到具体实现上来,如果完全使用C#自带的东西设计一个用户控件肯定会复杂一些,有没有现成的控件,只要稍微改写一下就可以呢,答案是肯定的。想到以前用第三方UI控件库DotNetBar的时候有个Slider控件,很符合我们的要求,只要继承改造一下就可以。先上完整代码,等下再来说明。
一、控件编码部分
1.控件(ZoomSlider.cs)源码:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Linq; using System.Text; using SharpMap; using DevComponents.DotNetBar.Controls; using System.Drawing; namespace SharpMap.Forms { /// <summary> /// 自定义地图滑块控件 /// </summary> public partial class ZoomSilder : Slider { private MapBox mapBox; private List<MapZoom> zoomList; /// <summary> /// 缩放级别 /// </summary> public List<MapZoom> ZoomList { get { return this.zoomList; } } /// <summary> /// 初始化设置 /// </summary> public ZoomSilder() { InitializeComponent(); this.DoubleBuffered = true; this.SliderOrientation = DevComponents.DotNetBar.eOrientation.Vertical; this.LabelVisible = false; this.Width = 20; this.Height = 100; } /// <summary> /// 设置背景透明 /// </summary> public void SetBackgroundTranspa