private void geoImage_MouseRightButtonDown(object sender, MouseButtonEventArgs e) { var mousePosition = e.GetPosition(geoImage); if (((WriteableBitmap)geoImage.Source).GetPixel((int)mousePosition.X, (int)mousePosition.Y) == editColor) { // Edit mode and user rightclicked an edit point LatLongRegion foundRegion = null; LatLongDegreePoint hitPoint = FindHitPoint(mousePosition, out foundRegion); if (hitPoint != null) { var msg = LatLongUtil.GetLatLongStringFromPoint(new Point(hitPoint.X, hitPoint.Y)); if (foundRegion != null) { msg += "\nRegion: " + foundRegion.Name + "\nColor code: " + foundRegion.ColorName; } MessageBox.Show(msg); } } else { // Enter pan mode origin = e.GetPosition(this); this.Cursor = Cursors.Hand; geoImage.CaptureMouse(); } }
// Find the nearest point that was just clicked on by the user private LatLongDegreePoint FindHitPoint(Point mousePosition, out LatLongRegion foundRegion) { var bitmap = (WriteableBitmap)geoImage.Source; foundRegion = null; LatLongDegreePoint foundPoint = null; foreach (var r in regions) { foundPoint = r.Coordinates.Find(point => Math.Abs(point.X - mousePosition.X) < editPointDelta && Math.Abs(point.Y - mousePosition.Y) < editPointDelta); if (foundPoint != null) { foundRegion = r; break; } } return(foundPoint); }