コード例 #1
0
        private void OnMapElementClick(MapControl sender, MapElementClickEventArgs e)
        {
            var mapIcon = e.MapElements.FirstOrDefault(x => x is MapIcon) as MapIcon;

            if (mapIcon != null)
            {
                if (!CustomPinControlShown)
                {
                    var customPin = GetCustomPin(mapIcon.Location.Position);
                    if (customPin == null)
                    {
                        throw new Exception("Custom pin not found");
                    }
                    customPinControl = new CustomPinControl(customPin);

                    var customPinControls = nativaMap.Children.Where(x => x is CustomPinControl);
                    foreach (var control in customPinControls)
                    {
                        nativaMap.Children.Remove(control);
                    }
                    var snPosition = new BasicGeoposition()
                    {
                        Latitude  = customPin.Position.Latitude,
                        Longitude = customPin.Position.Longitude
                    };
                    var snPoint = new Geopoint(snPosition);
                    nativaMap.Children.Add(customPinControl);

                    MapControl.SetLocation(customPinControl, snPoint);
                    MapControl.SetNormalizedAnchorPoint(customPinControl, new Windows.Foundation.Point(0.5, 1.0));
                    CustomPinControlShown = true;
                }
                else
                {
                    nativaMap.Children.Remove(customPinControl);
                    CustomPinControlShown = false;
                }
            }
        }
コード例 #2
0
        protected override void OnElementChanged(ElementChangedEventArgs <Map> e)
        {
            base.OnElementChanged(e);
            if (e.OldElement != null)
            {
                nativaMap.MapElementClick -= OnMapElementClick;
                nativaMap.MapTapped       -= NativaMap_MapTapped;
                nativaMap.Children.Clear();
                customPinControl = null;
                nativaMap        = null;
            }
            if (e.NewElement != null)
            {
                var formsMap = (CustomMap)e.NewElement;
                nativaMap  = Control as MapControl;
                customPins = formsMap.CustomPins;

                nativaMap.Children.Clear();
                nativaMap.MapElementClick += OnMapElementClick;

                nativaMap.MapTapped += NativaMap_MapTapped;
                if (customPins != null)
                {
                    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.Location = snPoint;
                        nativaMap.MapElements.Add(mapIcon);
                    }
                }
            }
        }