以撒丶重生的结合重生图钉Push Pin有什么用

Bing Maps开发应用与技巧五:实现图钉(Pushpin)的可拖放性(Draggable)
目前在Bing Maps Silverlight Control中并没有提供可拖放的图钉(Pushpin)控件,其强大、灵活的架构设计为开发者提供了非常强大的扩展支持,要实现图钉控件的可拖放性可以自己动手进行扩展实现。
  目前在Bing Maps Silverlight Control中并没有提供可拖放的图钉(Pushpin)控件,其强大、灵活的架构设计为开发者提供了非常强大的扩展支持,要实现图钉控件的可拖放性可以自己动手进行扩展实现。
System.Object&
&&&System.Windows.DependencyObject&
&&&&&System.Windows.UIElement&
&&&&&&&System.Windows.FrameworkElement&
&&&&&&&&&System.Windows.Controls.Control&
&&&&&&&&&&&System.Windows.Controls.ContentControl&
&&&&&&&&&&&&Microsoft.Maps.MapControl.Pushpin
  在扩展Pushpin之前先了解下Pushpin控件在Bing Maps Silverlight Control中的结构设计(如上代码结构),Pushpin是通过扩展Silverlight中的ContentControl控件开发而成,并加入了了定位坐标(Location)属性及其它相关的属性、字段。鉴于图钉的定位主要会用到Location属性,故本篇只提出此属性,其他的字段属性的详细在后续的相关博文里介绍。
  在使用Bing Maps Silverlight Control开发中,使用内置提供的图钉(不提供可拖放操作功能)主要有两种方式,分别是后台代码动态创建后作为子对象添加到MapLayer上,另外一种方式则是直接在XAML代码里直接配置。如下代码块:
&m:Map&x:Name=&myMap&&Margin=&0,0,0,0&&CredentialsProvider=&{StaticResource&MyCredentials}&&
& &m:MapLayer x:Name=&MapLayer&&    
&&&&&m:Pushpin&Location=&29.3,&106.&&Content=&D&&&/m:Pushpin&
&&/m:MapLayer&
  通过上代码段的结构很清晰的知道,图钉控件(Pushpin)的父节点为MapLayer对象,在MapLayer中有一个属性ParentMap可以得到当前MapLayer对象属于那一个Map控件对象,于是在图钉对象上既然能够获取到直接所属的Map控件,也就是说在图钉控件里是可以对Map控件进行动态控制的。
  接下来就通过自定义一个可拖拽的图钉类来对Bing Maps Silverlight Control中内置的图钉控件进行扩展,可以通过如下的代码来实现一个最基本的可拖放的图钉的结构。
public&class&DraggablePushpin&:&Microsoft.Maps.MapControl.Pushpin
&&&&///&&summary&
&&&&///&是否正在拖放
&&&&///&&/summary&
&&&&private&bool&IsDragging&=&false;
&&&&///&&summary&
&&&&///&鼠标拖放
&&&&///&&/summary&
&&&&private&EventHandler&MapMouseDragEventArgs&&MapMouseDragH
&&&&///&&summary&
&&&&///&鼠标左键弹起
&&&&///&&/summary&
&&&&private&MouseButtonEventHandler&MapMouseLeftButtonUpH
&&&&///&&summary&
&&&&///&鼠标移动
&&&&///&&/summary&
&&&&private&MouseEventHandler&MapMouseMoveH
&  实际上要实现一个对象的可拖拽是非常简单的,不清楚的可以访问我的另一篇博文《》进行了解。简单的说实现拖放操作就是通过鼠标事件动态改变对象的位置,只不过在Bing Maps Silverlight Control中要实现图钉控件的操作不能像传统的实现元素对象的操作那么去处理,这主要是由于地图控件(Map)中做了一些相关的处理的原因。
  鉴于这种种原因就不得不实现对象本身的行为特性的功能转移到Map控件的事件处理函数中去实现,Bing Maps Silverlight Control中的Map控件有一个名为MousePan的事件,专门用来处理鼠标拖放操作行为,其定义为如下结构:
[ScriptableMemberAttribute]&
public&override&event&EventHandler&MapMouseDragEventArgs&&MouseP
  另外还有一个事件就是MouseMove,它被定义为Bing Maps Silverlignt Control中的Map控件的事件,专门用来处理鼠标移动的相关操作行为,其功能作用非常强大。
//地图控件的鼠标移动事件定义
public&abstract&event&MouseEventHandler&MouseM
  有了以上两个事件的支持我们的自定义可拖放的图钉控件就可以面世出生了。下面为完整的可拖放图钉控件的代码:
///&&summary&
///&功能描述:自定义扩展图钉类,实现可拖拽图钉。
///&编&&&&写:Beniao
///&时&&&&间:日22:37:46
///&&/summary&
public&class&DraggablePushpin&:&Microsoft.Maps.MapControl.Pushpin
&&&&///&&summary&
&&&&///&是否正在拖放
&&&&///&&/summary&
&&&&private&bool&IsDragging&=&false;
&&&&///&&summary&
&&&&///&鼠标拖放
&&&&///&&/summary&
&&&&private&EventHandler&MapMouseDragEventArgs&&MapMouseDragH
&&&&///&&summary&
&&&&///&鼠标左键弹起
&&&&///&&/summary&
&&&&private&MouseButtonEventHandler&MapMouseLeftButtonUpH
&&&&///&&summary&
&&&&///&鼠标移动
&&&&///&&/summary&
&&&&private&MouseEventHandler&MapMouseMoveH
&&&&protected&override&void&OnMouseLeftButtonDown(MouseButtonEventArgs&e)
&&&&&&&&//因为图钉是添加在MapLayer上的
&&&&&&&&var&parentLayer&=&this.Parent&as&MapL
&&&&&&&&if&(parentLayer&!=&null)
&&&&&&&&&&&&//MapLayer是Map的一个子对象
&&&&&&&&&&&&var&parentMap&=&parentLayer.ParentM
&&&&&&&&&&&&if&(parentMap&!=&null)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&if&(this.MapMouseDragHandler&==&null)&
&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&this.MapMouseDragHandler&=&new&EventHandler&MapMouseDragEventArgs&(ParnetMap_MousePan);
&&&&&&&&&&&&&&&&&&&&parentMap.MousePan&+=&this.MapMouseDragH
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&if&(this.MapMouseLeftButtonUpHandler&==&null)
&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&this.MapMouseLeftButtonUpHandler&=&new&MouseButtonEventHandler(PrentMap_MouseLeftButtonUp);
&&&&&&&&&&&&&&&&&&&&parentMap.MouseLeftButtonUp&+=&this.MapMouseLeftButtonUpH
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&if&(this.MapMouseMoveHandler&==&null)
&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&this.MapMouseMoveHandler&=&new&MouseEventHandler(PrentMap_MouseMove);
&&&&&&&&&&&&&&&&&&&&parentMap.MouseMove&+=&this.MapMouseMoveH
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}
&&&&&&&&this.IsDragging&=&true;
&&&&&&&&base.OnMouseLeftButtonDown(e);
&&&&private&void&ParnetMap_MousePan(object&sender,&MapMouseDragEventArgs&e)
&&&&&&&&if&(this.IsDragging)
&&&&&&&&&&&&e.Handled&=&true;
&&&&private&void&PrentMap_MouseLeftButtonUp(object&sender,&MouseButtonEventArgs&e)
&&&&&&&&this.IsDragging&=&false;
&&&&private&void&PrentMap_MouseMove(object&sender,&MouseEventArgs&e)
&&&&&&&&var&map&=&sender&as&M
&&&&&&&&if&(this.IsDragging)
&&&&&&&&&&&&var&mousePosition&=&e.GetPosition(map);
&&&&&&&&&&&&var&geoPosition&=&map.ViewportPointToLocation(mousePosition);
       //重新定位图钉位置
&&&&&&&&&&&&this.Location&=&geoP
&  通过扩展后的图钉控件(DraggablePushpin)就是一个完整的可支持鼠标拖放的图钉控件,其使用和内置的原始控件一样简单,如下代码实现了动态添加500个图钉在MapLayer上。
private&void&AddPushPin()
&&&&for&(int&i&=&<span style="color: #;&i&&&<span style="color: #1;&i++)
&&&&&&&&MapLayer.AddChild(new&DraggablePushpin()&
&&&&&&& {&
&&&&&&&&&& Content&=&i.ToString()&
&&&&&&& },&
&&&&&&&&&& new&Location(i&/&<span style="color: #,&i&/&<span style="color: #)
&&&&&&& );
  最终的运行效果如下图(图中的图钉部分是通过鼠标拖放过后的)所示:
            
------分隔线----------------------------
来自 Microsoft开源项目Microsoft Health通用用户界面 通过该项目微软提供很多标准控...
在Silverlight相关技术论坛经常会看到Silverlight部署后,客户端无法更新本地XAP文件...
上一篇曾提及xaml中,每个对象元素的声明是对.NET类进行一次实例化操作。xaml作为声明...
在上几篇Silverlight Navigation导航框架教程中,主要介绍了Silverlight Navigation导...
在Silverlight实例教程 - 理解Navigation导航框架Frame类 介绍了Silverlight Navigati...
通过“Navigation导航框架开篇”的介绍,可以了解到Silverlight导航框架可被应用于多...PushPin类图钉按钮_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
37页免费17页免费8页免费6页免费3页免费4页免费2页免费2页免费2页免费1页免费
喜欢此文档的还喜欢9页免费19页免费11页7下载券3页1下载券12页免费
PushPin类图钉按钮|P&#8203;u&#8203;s&#8203;h&#8203;P&#8203;i&#8203;n&#8203; &#8203;类&#8203;图&#8203;钉&#8203;按&#8203;钮
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢以撒的结合_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
文档贡献者贡献于
评价文档:
3页免费75页免费6页免费1页1下载券75页1下载券75页4下载券1页免费1页免费2页免费
喜欢此文档的还喜欢75页2下载券45页免费6页免费17页1下载券7页2下载券
以撒的结合|
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
大小:29.69KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢}

我要回帖

更多关于 以撒的结合重生道具 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信