Table of Contents

Source Code WpfDesktopEditionSample HighlightAtMouseHover CS 120131.zip

App.xaml.cs

 using System;  
 using System.Collections.Generic;  
 using System.Configuration;  
 using System.Data;  
 using System.Linq;  
 using System.Windows;  
 
 namespace HighlightAtMouseHover  
 {  
     /// <summary>  
     /// Interaction logic for App.xaml  
     /// </summary>  
     public partial class App : Application  
     {  
     }  
 }  
 

TestWindow.xaml.cs

 using System;  
 using System.Collections.ObjectModel;  
 using System.Windows;  
 using System.Windows.Input;  
 using System.Windows.Media;  
 using System.Windows.Threading;  
 using ThinkGeo.MapSuite.Core;  
 using ThinkGeo.MapSuite.WpfDesktopEdition;  
 
 namespace HighlightAtMouseHover  
 {  
     /// <summary>  
     /// Interaction logic for TestWindow.xaml  
     /// </summary>  
     public partial class TestWindow : Window  
     {  
         private PointShape mousePosition = null;  
         private DispatcherTimer highlightTimer = null;  
 
         public TestWindow()  
         {  
             InitializeComponent();  
         }  
 
         private void Window_Loaded(object sender, RoutedEventArgs e)  
         {  
             //Sets the correct map unit and the extent of the map.  
             wpfMap1.MapUnit = GeographyUnit.DecimalDegree;  
             wpfMap1.CurrentExtent = new RectangleShape(-128,51,-65,19);  
             wpfMap1.Background = new SolidColorBrush(Color.FromRgb(148, 196, 243));  
 
             WorldMapKitWmsWpfOverlay worldMapKitWmsWpfOverlay = new WorldMapKitWmsWpfOverlay();  
             wpfMap1.Overlays.Add(worldMapKitWmsWpfOverlay);  
 
             LayerOverlay layerOverlay = new LayerOverlay();  
             ShapeFileFeatureLayer shapeFileLayer = new ShapeFileFeatureLayer(@"../../data/USStates.shp");  
             shapeFileLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.FromArgb(20, GeoColor.StandardColors.LightGreen),  
                                                                                                         GeoColor.StandardColors.LightGray);  
             shapeFileLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;  
 
             layerOverlay.Layers.Add("StatesLayer", shapeFileLayer);  
             wpfMap1.Overlays.Add("LayerFeatureOverlay", layerOverlay);  
 
             //Highlight layer  
             InMemoryFeatureLayer highlightLayer = new InMemoryFeatureLayer();  
             highlightLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.FromArgb(120, GeoColor.StandardColors.LightGreen),  
                                                                                                         GeoColor.StandardColors.LightGray);  
             highlightLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;  
 
             LayerOverlay highlightOverlay = new LayerOverlay();  
             highlightOverlay.Layers.Add("HighlightLayer", highlightLayer);  
             wpfMap1.Overlays.Add("HighlightOverlay", highlightOverlay);  
 
 
             wpfMap1.Refresh();  
         }  
 
 
         private void wpfMap1_MouseMove(object sender, MouseEventArgs e)  
         {  
             //Logic for Highlighting  
             mousePosition = wpfMap1.ToWorldCoordinate(e.GetPosition(wpfMap1));  
 
             if (highlightTimer != null)  
             {  
                 highlightTimer.Stop();  
             }  
 
             highlightTimer = new DispatcherTimer();  
             highlightTimer.Interval = new TimeSpan(1000000);  
             highlightTimer.Tick += new System.EventHandler(timer_Tick);  
             highlightTimer.Start();  
 
 
             //Gets the PointShape in world coordinates from screen coordinates.  
             Point point = e.MouseDevice.GetPosition(null);  
 
             ScreenPointF screenPointF = new ScreenPointF((float)point.X, (float)point.Y);  
             PointShape pointShape = ExtentHelper.ToWorldCoordinate(wpfMap1.CurrentExtent, screenPointF, (float)wpfMap1.Width, (float)wpfMap1.Height);  
 
             textBox1.Text = "X: " + DecimalDegreesHelper.GetDegreesMinutesSecondsStringFromDecimalDegree(pointShape.X) +  
                           "  Y: " + DecimalDegreesHelper.GetDegreesMinutesSecondsStringFromDecimalDegree(pointShape.Y);  
 
            }  
 
         void timer_Tick(object sender, System.EventArgs e)  
         {  
             HighlightAFeatureContainingPoint(mousePosition);  
             highlightTimer.Stop();  
         }  
 
         private void HighlightAFeatureContainingPoint(PointShape point)  
         {  
             LayerOverlay highlightOverlay = (LayerOverlay)wpfMap1.Overlays["HighlightOverlay"];  
             ShapeFileFeatureLayer featureLayer = (ShapeFileFeatureLayer)((LayerOverlay)wpfMap1.Overlays["LayerFeatureOverlay"]).Layers["StatesLayer"];  
             InMemoryFeatureLayer highlightLayer = (InMemoryFeatureLayer)highlightOverlay.Layers["HighlightLayer"];  
 
             featureLayer.Open();  
             Collection<Feature> features = featureLayer.QueryTools.GetFeaturesContaining(point, ReturningColumnsType.NoColumns);  
             featureLayer.Close();  
 
             if (features.Count != 0)  
             {  
                 highlightLayer.Open();  
                 highlightLayer.InternalFeatures.Clear();  
                 highlightLayer.InternalFeatures.Add(features[0]);  
                 highlightLayer.Close();  
             }  
             else  
             {  
                 highlightLayer.Open();  
                 highlightLayer.InternalFeatures.Clear();  
                 highlightLayer.Close();  
             }  
             highlightOverlay.Refresh();  
         }  
     }  
 }