C# 如何在Xamarin.Forms中单击按钮时从地图中删除多段线

C# 如何在Xamarin.Forms中单击按钮时从地图中删除多段线,c#,xamarin.android,xamarin.forms,C#,Xamarin.android,Xamarin.forms,我正在使用CustomMapRenderer.cs和ExtendedMap.cs在地图上通过点击(触摸事件)绘制多段线 ExtendedMap.cs位于Visual Studio 2015解决方案的MapTap(Portable)项目中,而CustomMapRenderer.cs位于MapTap.Android项目中 CustomMapRenderer.cs ClearPolyLine是一个接口,在custommapreder 问题是,当我调用上述代码行时,变量test本身不是null,但它的所

我正在使用
CustomMapRenderer.cs
ExtendedMap.cs
在地图上通过点击(触摸事件)绘制
多段线

ExtendedMap.cs
位于Visual Studio 2015解决方案的
MapTap(Portable)
项目中,而
CustomMapRenderer.cs
位于
MapTap.Android
项目中

CustomMapRenderer.cs
ClearPolyLine
是一个接口,在
custommapreder

问题是,当我调用上述代码行时,变量
test
本身不是
null
,但它的所有成员变量(在
CustomMapRenderer
中实现)都是null<代码>测试
的类型为
ClearPolyline


如何解决此问题?

PolyLine addedLine=map.AddPolyline(polygonOptions) 这将返回添加的多段线,以便将此多段线存储在属性或集合中。 在ExtendedMap的按钮上单击或命令扰动
RemovePolyline属性
(自定义可绑定属性),并根据值调用
addedLine.remove(),侦听扩展渲染器中的属性更改或循环,并将其删除

using System.Collections.Generic;
using Android.Gms.Maps;
using Android.Gms.Maps.Model;
using MapTap;
using MapTap.Droid;
using Xamarin.Forms;
using Xamarin.Forms.Maps;
using Xamarin.Forms.Maps.Android;
using System;

[assembly: ExportRenderer(typeof(ExtendedMap), typeof(CustomMapRenderer))]
[assembly: Dependency(typeof(CustomMapRenderer))]

namespace MapTap.Droid
{
    public class CustomMapRenderer : MapRenderer, IOnMapReadyCallback,ClearPolyline
    {
        GoogleMap map;
        List<LatLng> polygontest = new List<LatLng>();

        public CustomMapRenderer()
        {
        }

        protected override void OnElementChanged(Xamarin.Forms.Platform.Android.ElementChangedEventArgs<Map> e)
        {          
            if (map != null)
                map.MapClick -= googleMap_MapClick;
            base.OnElementChanged(e);
            if (Control != null)
                ((MapView)Control).GetMapAsync(this);
        }

        public void OnMapReady(GoogleMap googleMap)
        {
            map = googleMap;
            if (map != null)
                map.MapClick += googleMap_MapClick; ;
        }

        private void googleMap_MapClick(object sender, GoogleMap.MapClickEventArgs e)
        {
            polygontest.Add(new LatLng(e.Point.Latitude, e.Point.Longitude));
            ((ExtendedMap)Element).OnTap(new Position(e.Point.Latitude, e.Point.Longitude));           

            if (polygontest.Count >1 )
            {
                AddPolygons();               
            }
        }
        public void Clearline()
        {
           map.Clear();
        }

        void AddPolygons()
        {
           var polygonOptions = new PolylineOptions();

            polygonOptions.InvokeColor(0x66FF0000);

            foreach (var position in polygontest)
            {
                polygonOptions.Add(new LatLng(position.Latitude, position.Longitude));
            }

            map.AddPolyline(polygonOptions);
            polygontest.RemoveAt(0);
        }   
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms.Maps;
using Xamarin.Forms.Maps.Android;
using Android.Gms.Maps;
using Android.Gms.Maps.Model;
using Xamarin.Forms;

namespace MapTap
{   
    public class ExtendedMap : Map
    {
        public event EventHandler<TapEventArgs> Tap;
        public ExtendedMap()
        {            
        }

        public ExtendedMap(MapSpan region) : base(region)
        {
        }

        public void OnTap(Position coordinate)
        {
            OnTap(new TapEventArgs { Position = coordinate });

            var lat = coordinate.Latitude;
            var lng = coordinate.Longitude;

            putpinonclick(lat,lng);
        }

        public void putpinonclick(double lat, double lng)
        {
            var pin = new Pin
            {
                Type = PinType.SavedPin,
                Position = new Position(lat, lng),
                Label = "Xamarin San Francisco Office",
                Address = "394 Pacific Ave, San Francisco CA"
            };

            this.Pins.Add(pin);           
        }

        protected virtual void OnTap(TapEventArgs e)
        {
            var handler = Tap;
            if (handler != null) handler(this, e);
        }
    }

    public class TapEventArgs : EventArgs
    {
        public Position Position { get; set; }
    }
}
 var test = DependencyService.Get<ClearPolyline>();
                test.Clearline();