zoukankan      html  css  js  c++  java
  • ArcGIS api fo silverlight学习三(利用ElementLayer实现鼠标悬浮弹出自定义窗体)

    接着上一节继续学习,本节主要是利用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();
    }

  • 相关阅读:
    Git笔记
    Android笔记
    个人人生警示
    Java 注解
    JAVA面试题
    kotlin学习笔记
    Android Studio之gradle和gradle插件
    gcc在Linux下编译so文件出错 jni.h: no such file or directory
    apktool新官网地址
    Vim 使用记录
  • 原文地址:https://www.cnblogs.com/wgying/p/4531782.html
Copyright © 2011-2022 走看看