Solved! Go to Solution.
private void MyMap_ExtentChanged(object sender, ExtentEventArgs e) { //new envelope to set if needed Envelope newExtent = null; if (MyMap.WrapAroundIsActive) { //Wrap around is set to true ESRI.ArcGIS.Client.Geometry.Geometry normalizedExtent = ESRI.ArcGIS.Client.Geometry.Geometry.NormalizeCentralMeridian(e.NewExtent); if (normalizedExtent is Polygon) { newExtent = new Envelope(); foreach (MapPoint p in (normalizedExtent as Polygon).Rings[0]) { if (p.X < newExtent.XMin || double.IsNaN(newExtent.XMin)) newExtent.XMin = p.X; if (p.Y < newExtent.YMin || double.IsNaN(newExtent.YMin)) newExtent.YMin = p.Y; } foreach (MapPoint p in (normalizedExtent as Polygon).Rings[1]) { if (p.X > newExtent.XMax || double.IsNaN(newExtent.XMax)) newExtent.XMax = p.X; if (p.Y > newExtent.YMax || double.IsNaN(newExtent.YMax)) newExtent.YMax = p.Y; } } else if (normalizedExtent is Envelope) { newExtent = normalizedExtent as Envelope; } } else { newExtent = e.NewExtent; } //constraint it to -90 to 90 degree latitude (Y-axis) newExtent.YMin = Math.Max(-90, newExtent.YMin); newExtent.YMax = Math.Min(90, newExtent.YMax); //No constraint on longitude (X-axis) newExtent.XMin = MyMap.Extent.XMin; newExtent.XMax = MyMap.Extent.XMax; if ((MyMap != null) && ((MyMap.Extent.YMin != newExtent.YMin) || (MyMap.Extent.YMax != newExtent.YMax))) { //set map new envelope if Y-axis min and max is exceeded MyMap.Extent = newExtent; } }