public static void SetDrag(Map map, Point point, Point origin, Location mouseCenter) { MouseDragBehavior behavior = (Keyboard.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shift ? map.MouseShiftDragMode : map.MouseDragMode; switch (behavior) { case MouseDragBehavior.Drag: { ICoordinateService coordinateService = CoordinateServiceProvider.GetService(map); Point pixelCenter = coordinateService.LogicalToPixel(map.SpatialReference.GeographicToLogical(mouseCenter)); pixelCenter.X += origin.X - point.X; pixelCenter.Y += origin.Y - point.Y; Point offset = map.MultiScaleImage.ViewportOrigin; Size viewLogicalSize = new Size(map.MultiScaleImage.ViewportWidth, map.MultiScaleImage.ViewportWidth * map.MultiScaleImage.ActualHeight / map.MultiScaleImage.ActualWidth); double pixelFactorX = viewLogicalSize.Width / map.MultiScaleImage.ActualWidth; double pixelFactorY = viewLogicalSize.Height / map.MultiScaleImage.ActualHeight; Point logical = new Point((pixelCenter.X * pixelFactorX) + offset.X, (pixelCenter.Y * pixelFactorY) + offset.Y); map.Center = coordinateService.LogicalToGeographic(logical); } break; case MouseDragBehavior.Select: { map.MouseControl.SelectBoxLocation = new Point(Math.Min(origin.X, point.X), Math.Min(origin.Y, point.Y)); var newSize = new Size(Math.Abs(origin.X - point.X), Math.Abs(origin.Y - point.Y)); map.MouseControl.SelectBoxSize = newSize; } break; } }