MouseEnter Event on MapPolyLine and MapPolygon

4 posts, 0 answers
  1. Vidyadhar
    Vidyadhar avatar
    23 posts
    Member since:
    Oct 2011

    Posted 06 Feb 2012 Link to this post

    Hi,

    Am trying to change the cursor icon for the elements on the information layer of the RadMap once the user takes his mouse pointer over the element. Am importing the elements using the KML DataImport feature. And foreach element from the List of Framework Elements, am getting the type of the element, typecasting it to the respective type(MapPinPoint,MapPolyLine and the MapPolygon).
    Now I was able to bind the MouseClickevents for the elements for all of them, but not the MouseEnterEvent, which works for the MapPinPoint, but not for the MapPolyLine and MapPolygon. Am not sure if I have to do anything else to get that done for the Polyline and Polygon.
    Can you please suggest me anything?

    Thanks,
    Viddy.
  2. Andrey
    Admin
    Andrey avatar
    1681 posts

    Posted 09 Feb 2012 Link to this post

    Hello Viddy,

    I suppose that you attach events to the framework element directly without casting it to the MapShape type before. Correspondent code should looks like the following:

    foreach (FrameworkElement item in eventArgs.Items)
    {
        MapShape shape = item as MapShape;
        if (shape != null)
        {
            shape.MouseEnter += new MouseEventHandler(this.ShapeMouseEnter);
            shape.MouseLeave += new MouseEventHandler(this.ShapeMouseLeave);
        }
    }


    Regards,
    Andrey Murzov
    the Telerik team
    Sharpen your .NET Ninja skills! Attend Q1 webinar week and get a chance to win a license! Book your seat now >>
  3. DevCraft banner
  4. Vidyadhar
    Vidyadhar avatar
    23 posts
    Member since:
    Oct 2011

    Posted 20 Apr 2012 Link to this post

    Hi Andrey,
    I have kinda moved away of this for a while. So, I tried to cast the elements from the list into their respective types and attached the mouse enter event handler. And in the handler, I tried to change the cursor icon. But the icon doesn't change when the mouse enters the element.

    Here's my XAML:

    <UserControl x:Class="TestMouseCursorIcon.MainPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
        mc:Ignorable="d"
        d:DesignHeight="300" d:DesignWidth="400">

        <Grid x:Name="LayoutRoot" Background="White">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>
            <Button Content="Load Map" Height="50" Width="75" Click="Button_Click" />
            <telerik:RadMap Name="MyMap" Grid.Row="1">
                <telerik:InformationLayer Name="infolayer"/>
            </telerik:RadMap>
        </Grid>
        
    </UserControl>


    CodeBehind:

    using System;
    using System.Collections.Generic;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Input;
    using System.IO;
    using Telerik.Windows.Controls.Map;

    namespace TestMouseCursorIcon
    {
        public partial class MainPage : UserControl
        {
            List<FrameworkElement> Items = new List<FrameworkElement>();
            public MainPage()
            {
                InitializeComponent();
                this.MyMap.Provider = new BingMapProvider();
            }

            private void Button_Click(object sender, RoutedEventArgs e)
            {
                WebClient webclient = new WebClient();
                webclient.OpenReadCompleted += new OpenReadCompletedEventHandler(webclient_OpenReadCompleted);
                webclient.OpenReadAsync(new Uri("/PhaseAngleOverlay.Kml", UriKind.Relative));
            }

            void webclient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
            {
                StreamReader sr = new StreamReader(e.Result);
                Items = KmlReader.Read(sr.ReadToEnd());

                foreach (FrameworkElement item in Items)
                {
                    if (item.GetType() == typeof(MapShape))
                    {
                        var placemark = item as MapShape;
                        placemark.MouseEnter += new MouseEventHandler(placemark_MouseEnter);
                    }
                    if (item.GetType() == typeof(MapPinPoint))
                    {
                        var placemark = item as MapPinPoint;
                        placemark.MouseEnter += new MouseEventHandler(placemark_MouseEnter);
                    }
                    if (item.GetType() == typeof(MapPolyline))
                    {
                        var placemark = item as MapPolyline;
                        placemark.MouseEnter += new MouseEventHandler(placemark_MouseEnter);
                    }
                    if (item.GetType() == typeof(MapPolygon))
                    {
                        var placemark = item as MapPolygon;
                        placemark.MouseEnter += new MouseEventHandler(placemark_MouseEnter);
                    }
                }
                this.infolayer.ItemsSource = Items;
            }

            void placemark_MouseEnter(object sender, MouseEventArgs e)
            {
                if (sender.GetType() == typeof(MapShape))
                {
                    MapShape shape = sender as MapShape;
                    shape.Cursor = Cursors.Hand;
                }
                if (sender.GetType() == typeof(MapPinPoint))
                {
                    MapPinPoint point = sender as MapPinPoint;
                    point.Cursor = Cursors.Hand;
                }
                if (sender.GetType() == typeof(MapPolyline))
                {
                    MapPolyline line = sender as MapPolyline;
                    line.Cursor = Cursors.Hand;
                }
            }
        }
    }

    MyKML:

    <?xml version="1.0" encoding="utf-8"?>
    <kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
      <Document>
        <name>Phase Angle Vector KML</name>
        <Style id="sn_intersectionStyle">
          <LineStyle>
            <color>FFFFFFFF</color>
            <width>4</width>
          </LineStyle>
        </Style>
        <Style id="sn_vectorLineGreen">
          <LineStyle>
            <color>FF00FF00</color>
            <width>2</width>
          </LineStyle>
        </Style>
        <Style id="sn_vectorLineYellow">
          <LineStyle>
            <color>FF00FFFF</color>
            <width>2</width>
          </LineStyle>
        </Style>
        <Style id="sn_vectorLineRed">
          <LineStyle>
            <color>FF0000FF</color>
            <width>2</width>
          </LineStyle>
        </Style>
        <Placemark>
          <name>Element1</name>
          <description>JohnDavid</description>
          <styleUrl>#sn_intersectionStyle</styleUrl>
          <Polygon>
            <outerBoundaryIs>
              <LinearRing>
                <coordinates>-120.723791532451,45.7178720040713,0 -120.723042216871,45.7167065629117,0 -120.722148683575,45.7155914399742,0 -120.721117651737,45.7145353512768,0 -120.71995692431,45.7135466030573,0 -120.718675341561,45.7126330223076,0 -120.717282730733,45.7118018893886,0 -120.71578984388,45.7110598723788,0 -120.714208282746,45.7104129634789,0 -120.712550415568,45.709866416927,0 -120.710829281689,45.7094246987039,0 -120.709058478211,45.7090914343267,0 -120.707252055286,45.7088693685708,0 -120.705424382736,45.7087603355137,0 -120.703590024342,45.7087652389643,0 -120.701763607439,45.7088840378903,0 -120.699959685707,45.7091157483318,0 -120.698192606766,45.7094584574452,0 -120.696476384111,45.7099093425624,0 -120.694824574286,45.7104647031513,0 -120.693250160848,45.711120006123,0 -120.691765449556,45.7118699304845,0 -120.690381973793,45.7127084225077,0 -120.68911040771,45.713628759444,0 -120.687960497649,45.71462361141,0 -120.686940994711,45.7156851074371,0 -120.68605961108,45.7168049044219,0 -120.68532297283,45.7179742525761,0 -120.684736587706,45.7191840663949,0 -120.684304822755,45.7204249863583,0 -120.68403088533,45.7216874505123,0 -120.683916807235,45.7229617542546,0 -120.683963442314,45.7242381152096,0 -120.684170457127,45.7255067374552,0 -120.684536334482,45.7267578755837,0 -120.685058380442,45.7279818959484,0 -120.685732730552,45.7291693408886,0 -120.686554366431,45.7303109971588,0 -120.687517139168,45.7313979605626,0 -120.68861379747,45.7324217019272,0 -120.689836020404,45.7333741362784,0 -120.691174472166,45.7342476918544,0 -120.692618851299,45.7350353762671,0 -120.694157965234,45.7357308415157,0 -120.695779803522,45.736328446695,0 -120.697471635462,45.7368233180088,0 -120.699220108328,45.7372113968384,0 -120.701011357426,45.7374894879261,0 -120.70283113039,45.7376552924577,0 -120.704664915621,45.7377074371847,0 -120.706498070807,45.7376454908185,0 -120.708315959676,45.7374699661779,0 -120.710104086573,45.7371823166076,0 -120.711848227944,45.7367849187849,0 -120.713534559432,45.7362810441025,0 -120.715149777161,45.7356748226792,0 -120.716681206443,45.7349711974711,0 -120.718116907785,45.7341758718994,0 -120.719445758675,45.7332952519472,0 -120.720657539559,45.7323363824522,0 -120.721742999029,45.7313068813885,0 -120.722693909214,45.7302148752267,0 -120.723503108884,45.7290689270537,0 -120.72416454583,45.7278779721459,0 -120.724673300551,45.7266512464086,0 -120.725025611096,45.7253982253446,0 -120.725218880037,45.7241285529397,0 -120.725251695774,45.722851983515,0 -120.725123825168,45.7215783149032,0 -120.724836222619,45.7203173231011,0 -120.724391022506,45.7190787037061,0 -120.723791532451,45.7178720040713,0</coordinates>
              </LinearRing>
            </outerBoundaryIs>
          </Polygon>
        </Placemark>
        <Placemark>
          <name>Element2</name>
          <styleUrl>#sn_vectorLineYellow</styleUrl>
          <LineString>
            <coordinates>-120.695315545739,45.7361573784503,0 -119.029291010421,47.9537808164508,0</coordinates>
          </LineString>
        </Placemark>
        <Placemark>
          <name>30</name>
          <Point>
            <coordinates>-118.856,46.9539,0</coordinates>
          </Point>
        </Placemark>
        </Document>
    </kml>

    I can see the cursor changing for the "Point" but not for the Polyline and Polygon. Can you guide me where am I going wrong.

    Thanks in advance,
    Viddy.
  5. Andrey
    Admin
    Andrey avatar
    1681 posts

    Posted 25 Apr 2012 Link to this post

    Hello Vidyadhar,

    The problem is in your placemark_MouseEnter method. You shouldn't set cursor for the map shape, but to the parent user control. For example:

    private Cursor oldCursor;
     
    private void ShapeMouseEnter(object sender, MouseEventArgs e)
    {
        MapShape shape = sender as MapShape;
        if (shape != null)
        {
            oldCursor = this.Cursor;
            this.Cursor = Cursors.Hand;
        }
    }
     
    private void ShapeMouseLeave(object sender, MouseEventArgs e)
    {
        MapShape shape = sender as MapShape;
        if (shape != null)
        {
            this.Cursor = oldCursor;
        }
    }


    Greetings,
    Andrey Murzov
    the Telerik team

    Explore the entire Telerik portfolio by downloading the Ultimate Collection trial package. Get it now >>

Back to Top