private void OnMapElementClick(MapControl sender, MapElementClickEventArgs args) { var mapIcon = args.MapElements.FirstOrDefault(x => x is MapIcon) as MapIcon; if (mapIcon != null) { if (xamarinOverlayShown) { nativeMap.Children.Remove(mapOverlay); xamarinOverlayShown = false; } var customPin = GetCustomPin(mapIcon.Location.Position); if (customPin == null) { throw new Exception("Custom pin not found"); } mapOverlay = new XamarinMapOverlay(customPin); var snPosition = new BasicGeoposition { Latitude = customPin.Position.Latitude, Longitude = customPin.Position.Longitude }; var snPoint = new Geopoint(snPosition); nativeMap.Children.Add(mapOverlay); MapControl.SetLocation(mapOverlay, snPoint); MapControl.SetNormalizedAnchorPoint(mapOverlay, new Windows.Foundation.Point(0.5, 1.0)); xamarinOverlayShown = true; } }
private void OnMapElementClick(MapControl sender, MapElementClickEventArgs args) { var mapIcon = args.MapElements.FirstOrDefault(x => x is MapIcon) as MapIcon; if (mapIcon != null) { var customPin = GetCustomPin(mapIcon.Location.Position); if (customPin == null) { throw new Exception("Custom pin not found"); } _mapOverlay = new XamarinMapOverlay(customPin); var xamarinMapOverlays = _nativeMap.Children.Where(o => o is XamarinMapOverlay); // Remove shown XamarinMapOverlay foreach (var xamarinMapOverlay in xamarinMapOverlays) { _nativeMap.Children.Remove(xamarinMapOverlay); } var snPosition = new BasicGeoposition { Latitude = customPin.Pin.Position.Latitude, Longitude = customPin.Pin.Position.Longitude }; var snPoint = new Geopoint(snPosition); _nativeMap.Children.Add(_mapOverlay); MapControl.SetLocation(_mapOverlay, snPoint); MapControl.SetNormalizedAnchorPoint(_mapOverlay, new Windows.Foundation.Point(0.5, 1.0)); } }
protected override void OnElementChanged(ElementChangedEventArgs <Map> e) { base.OnElementChanged(e); if (e.OldElement != null) { nativeMap.MapElementClick -= OnMapElementClick; nativeMap.Children.Clear(); mapOverlay = null; nativeMap = null; } if (e.NewElement != null) { var formsMap = (CustomMap)e.NewElement; nativeMap = Control as MapControl; customPins = formsMap.CustomPins; nativeMap.Children.Clear(); nativeMap.MapElementClick += OnMapElementClick; var coordinates = new List <BasicGeoposition>(); foreach (var position in formsMap.RouteCoordinates) { coordinates.Add(new BasicGeoposition { Latitude = position.Latitude, Longitude = position.Longitude }); } var polyline = new MapPolyline { StrokeColor = Windows.UI.Color.FromArgb(128, 255, 0, 0), StrokeThickness = 5, Path = new Geopath(coordinates) }; nativeMap.MapElements.Add(polyline); foreach (var pin in customPins) { var snPosition = new BasicGeoposition { Latitude = pin.Pin.Position.Latitude, Longitude = pin.Pin.Position.Longitude }; var snPoint = new Geopoint(snPosition); var mapIcon = new MapIcon { Image = RandomAccessStreamReference.CreateFromUri(new Uri("ms-appx:///Assets/Images/pin.png")), CollisionBehaviorDesired = MapElementCollisionBehavior.RemainVisible, Location = snPoint, NormalizedAnchorPoint = new Windows.Foundation.Point(0.5, 1.0) }; nativeMap.MapElements.Add(mapIcon); } } }
protected override void OnElementChanged(ElementChangedEventArgs <Map> e) { base.OnElementChanged(e); if (e.OldElement != null) { nativeMap.MapElementClick -= OnMapElementClick; nativeMap.Children.Clear(); mapOverlay = null; nativeMap = null; } if (e.NewElement != null) { var formsMap = (CustomMap)e.NewElement; nativeMap = Control as MapControl; nativeMap.MapElementClick += OnMapElementClick; formsMap.CustomPinsUpdated += (s, eventArgs) => { nativeMap.Children.Clear(); customPins = formsMap.CustomPins; foreach (var pin in customPins) { var snPosition = new BasicGeoposition { Latitude = pin.Position.Latitude, Longitude = pin.Position.Longitude }; var snPoint = new Geopoint(snPosition); var mapIcon = new MapIcon(); mapIcon.Image = RandomAccessStreamReference.CreateFromUri(new Uri("ms-appx:///pin.png")); mapIcon.CollisionBehaviorDesired = MapElementCollisionBehavior.RemainVisible; mapIcon.Location = snPoint; mapIcon.NormalizedAnchorPoint = new Windows.Foundation.Point(0.5, 1.0); nativeMap.MapElements.Add(mapIcon); } }; } }