接着上一节继续学习,本节主要是利用ElementLayer实现鼠标悬浮弹出自定义窗体

参考博文:http://www.cnblogs.com/luxiaoxun/p/3322218.html

一、新建silverlight用户控件

自定义窗体,可以放置很多控件,命名为MyMapTip.xaml,代码为:

<Grid x:Name="LayoutRoot" Width="400" Height="100" Background="Transparent">
<Border CornerRadius="5">
<Border.Background>
<SolidColorBrush Color="Black" Opacity="0.5"/>
</Border.Background>

<StackPanel Margin="5" >
<TextBlock Foreground="Wheat" TextWrapping="Wrap" Name="textHEADLINE" ></TextBlock>
<TextBlock Foreground="Wheat" TextWrapping="Wrap" Name="textEFFECTIVE" ></TextBlock>
<TextBlock Foreground="Wheat" TextWrapping="Wrap" Name="textDESCRIPTION" ></TextBlock>

</StackPanel>

</Border>

</Grid>

后台代码为:

public MyMapTip(string EFFECTIVE, string HEADLINE, string DESCRIPTION)
{
InitializeComponent();
textEFFECTIVE.Text = "发布时间:" + EFFECTIVE;
textHEADLINE.Text = "标题:" + HEADLINE;
textDESCRIPTION.Text = DESCRIPTION;
}

二、实现自定义窗体弹出

1、定义全局变量:ElementLayer elementLayer = new ESRI.ArcGIS.Client.ElementLayer();

2、在地图中加载ElementLayer(最好放在加载GraphicsLayer之后,图层加载顺序:后加载的在上层):

  this.myMap.Layers.Add(elementLayer);

3、为Graphic添加属性,并为GraphicsLayer增加鼠标事件

private void AddLightMarker()
{
GraphicsLayer glayer = new ESRI.ArcGIS.Client.GraphicsLayer();
Graphic g = new Graphic()
{
Geometry = mercator.FromGeographic(new MapPoint(108.2, 37.1)),
Symbol = LayoutRoot.Resources["StrobeMarkerSymbol"] as Symbol
};
g.Attributes.Add("EFFECTIVE", "Helllo!");
g.Attributes.Add("HEADLINE", "fdafadfaf");
g.Attributes.Add("DESCRIPTION", "badfadfafaf");
glayer.Graphics.Add(g);

this.myMap.Layers.Add(glayer);

//鼠标悬停事件
glayer.MouseEnter += glayer_MouseEnter;
//鼠标移开事件
glayer.MouseLeave += glayer_MouseLeave;
}

4、处理鼠标事件,显示自定义窗体

void glayer_MouseLeave(object sender, ESRI.ArcGIS.Client.GraphicMouseEventArgs e)
{
elementLayer.Children.Clear();
//throw new System.NotImplementedException();
}

void glayer_MouseEnter(object sender, ESRI.ArcGIS.Client.GraphicMouseEventArgs e)
{
Graphic g = e.Graphic;

elementLayer.Children.Clear(); //清除上一次的展示界面
MyMapTip infoWindow = new MyMapTip(g.Attributes["EFFECTIVE"].ToString(), g.Attributes["HEADLINE"].ToString(), g.Attributes["DESCRIPTION"].ToString()); //实例化一个界面
//投影坐标系转换成地理坐标系(从WKID=102100到WKID=4326)
MapPoint mapPoint = mercator.ToGeographic(g.Geometry as ESRI.ArcGIS.Client.Geometry.MapPoint) as MapPoint;
//设置该参数来控制图显示的位置
ElementLayer.SetEnvelope(infoWindow, new Envelope(mapPoint.X, mapPoint.Y, mapPoint.X, mapPoint.Y));
elementLayer.Children.Add(infoWindow); //将界面添加到ElementLayer
//throw new System.NotImplementedException();
}

ArcGIS api fo silverlight学习三(利用ElementLayer实现鼠标悬浮弹出自定义窗体)的更多相关文章

  1. ArcGIS api fo silverlight学习一(silverlight加载GeoServer发布的WMS地图)

    最好的学习资料ArcGIS api fo silverlight官网:http://help.arcgis.com/en/webapi/silverlight/samples/start.htm 一. ...

  2. ArcGIS api fo silverlight学习二(silverlight加载GraphicsLayer)

    上一节学习了silverlight加载GeoServer发布的WMS地图,这一节学习一下加载GraphicsLayer 一.加载.png或jpg文件图标 1.在MainPage.xaml中添加资源配置 ...

  3. ArcGIS API for Silverlight学习笔记

    ArcGIS API for Silverlight学习笔记(一):为什么要用Silverlight API(转) 你用上3G手机了吗?你可能会说,我就是喜欢用nokia1100,ABCDEFG跟我都 ...

  4. ArcGIS API for Silverlight 学习笔记

    这里主要讲解展示不同的服务地图 先看一个实例: 新建一个Silverlight项目,在MainPage.xaml文件中,引入 ESRI.ArcGIS.Client 命名空间和 ESRI.ArcGIS. ...

  5. ArcGIS API for Silverlight 之ElementLayer使用及TextSymbol的模板使用

    原文:ArcGIS API for Silverlight 之ElementLayer使用及TextSymbol的模板使用 在开发中动态在地图上添加文字信息,可以使用TextSymbol添加文字 // ...

  6. ArcGIS API for Silverlight开发入门

    你用上3G手机了吗?你可能会说,我就是喜欢用nokia1100,ABCDEFG跟我 都没关系.但你不能否认3G是一种趋势,最终我们每个人都会被包裹在3G网络中.1100也不是一成不变,没准哪天为了打击 ...

  7. ArcGIS API for Silverlight 绘制降雨路径动画

    原文:ArcGIS API for Silverlight 绘制降雨路径动画 #region 降雨动画演示 2014-04-16 List<Graphic> graphics = new ...

  8. ArcGIS API for Silverlight 调用GP服务加载等值线图层

    原文:ArcGIS API for Silverlight 调用GP服务加载等值线图层 第二篇.Silverlight客户端调用GP服务 利用ArcGIS API for Silverlight实现G ...

  9. ArcGIS API for Silverlight 调用GP服务准备---GP模型建立、发布、测试

    原文:ArcGIS API for Silverlight 调用GP服务准备---GP模型建立.发布.测试 第一篇.GP降雨量等值线建模.发布及测试 在水利.气象等行业中,要在WebGIS中实现空间分 ...

随机推荐

  1. win版本对比

    Win+R 输入:slmgr.vbs -dlv 显示:最为详尽的激活信息,包括:激活ID.安装ID.激活截止日期slmgr.vbs -dli 显示:操作系统版本.部分产品密钥.许可证状态slmgr.v ...

  2. jquery之实例应用

    Query是一个兼容多浏览器的javascript库,核心理念是write less,do more(写得更少,做得更多),对javascript进行了封装,是的更加便捷的开发,并且在兼容性方面十分优 ...

  3. 多节点ListView的加载效率

    据说实际场景中node数量达到4k~6k,ListView就崩溃了.(怎么个崩溃法未知) 小试了一下,10w个node毫无压力.(win7 vs2010 .net2.0) 有意思的地方在于,动态添加如 ...

  4. [Spring] - Quartz定时任务 - Annotation

    Spring + Quartz可以使用annoation方式: 1.AppJob类: package com.my.quartz.testquartz1; import org.springframe ...

  5. IOS开发之--NSPredicate

    我把常用的NSPredicate使用场景整理了一下   官方参考: https://developer.apple.com/library/mac/#documentation/Cocoa/Refer ...

  6. div加边框

    一.虚线与实线边框 边框虚线样式:dashed 边框实现样式:solid border:1px dashed #000 代表设置对象边框宽度为1px黑色虚线边框 border:1px solid #0 ...

  7. SQLServer的学习场景(关于row_number()和COALESCE()的使用)

    --使用Sql语句,统计出每辆汽车每天行驶的里程数(不是总里程) 以下为脚本 CREATE TABLE [dbo].[CarData]([CarID] [int] NULL,[Mileage] [in ...

  8. 关于PetaPoco的T4模板使用

    PetaPoco是一款适用于.Net 和Mono的微小.快速.单文件的微型ORM.PetaPoco介绍:http://www.cnblogs.com/youring2/archive/2012/06/ ...

  9. 介绍Unreal Engine 4中的接口(Interface)使用C++和蓝图

    这个教程是从UE4 Wiki上整理而来. 在C++中直接使用Interface大家应该很熟悉.只是简单先定义一个个有虚函数的基类,然后在子类中实现相应的虚函数.像这样的虚函数的基类一般概念上叫接口.那 ...

  10. W5500 keep-alive的用途与用法--新华龙电子

    大家是否遇到过这样的问题,W5500作为服务器已经建立连接,突然网线掉了,然后再去连接W5500,就连不上了.为什么?下面对这个问题进行解释说明,并提出解决办法. 图1中的上位机程序作为客户端,连接W ...