![](/img/trans.png)
[英]How to access button click inside listview datatemplate in Xamarin.Forms?
[英]How to remove polyline from the map on button click in Xamarin.Forms
我正在使用CustomMapRenderer.cs
和ExtendedMap.cs
通過點擊(觸摸事件)在地圖上繪制polylines
。
在Visual Studio 2015解決方案中, ExtendedMap.cs
在MapTap (Portable)
項目中,而CustomMapRenderer.cs
在MapTap.Android
項目中。
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; }
}
}
我想從MainPage.xaml
單擊按鈕(清除按鈕)時清除折線。
我正在使用MainPage.Xaml.cs
調用CustomMapRendrer.cs
函數
var test = DependencyService.Get<ClearPolyline>();
test.Clearline();
ClearPolyLine
是一個接口,而在CustomMapRender
實現的接口功能中的Clearline
問題是,當我調用上面的代碼行時,變量test
本身不為null
,但是其所有成員變量(在CustomMapRenderer
實現)均為null。 test
的類型為ClearPolyline
。
如何解決這個問題?
PolyLine addedLine = map.AddPolyline(polygonOptions);
這應該返回添加的PolyLine,因此將此Ployline存儲在屬性或集合中。 在按鈕上單擊或命令打擾RemovePolyline property
(自定義可綁定屬性),並在擴展渲染器中並基於調用addedLine.remove();
的值來addedLine.remove();
屬性更改addedLine.remove();
或循環收集折線並將其刪除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.