In der CustomMapRenderer.cs Datei, ich brauche das Element ausgewählte Variable in einem XAML-Picker in meiner MapPage.xaml Datei, die sich ändert, gefunden abzurufen, wenn ein Benutzer eine Option in meiner XAML-Picker nimmt.
Wenn Sie die offizielle doc Customizing a Map gefolgt Ihre CustomMapRenderer
, dann in PCL zu schaffen, sollte es eine Klasse sein, die sich von Map
erbt, zum Beispiel:
public class CustomMap : Map
{
}
Wenn dann Ihre Kommissionierer eine andere Steuerung ist In Ihrer MainPage
können Sie eine bindbare Eigenschaft für Ihre CustomMap
erstellen und OnElementPropertyChanged
in Ihrem Renderer überschreiben, um diese Eigenschaft zu erhalten, wenn sie geändert wurde.
Zum Beispiel in PCL:
public class MapWithMyZoomControl : Map
{
public ZoomState MyZoom
{
get { return (ZoomState)GetValue(MyZoomProperty); }
set { SetValue(MyZoomProperty, value); }
}
public static readonly BindableProperty MyZoomProperty =
BindableProperty.Create(
propertyName: "MyZoom",
returnType: typeof(ZoomState),
declaringType: typeof(MapWithMyZoomControl),
defaultValue: ZoomState.normal,
propertyChanged: OnZoomPropertyChanged);
public static void OnZoomPropertyChanged(BindableObject bindable, object oldValue, object newValue)
{
}
public enum ZoomState
{
normal,
zoomin,
zoomout
}
}
Und in seinem Renderer:
public class MapWithMyZoomControlRenderer : MapRenderer, IOnMapReadyCallback
{
private GoogleMap map;
public void OnMapReady(GoogleMap googleMap)
{
map = googleMap;
map.UiSettings.ZoomControlsEnabled = false;
}
protected override void OnElementChanged(ElementChangedEventArgs<Map> e)
{
base.OnElementChanged(e);
if (e.OldElement != null)
{
// Unsubscribe
}
if (e.NewElement != null)
{
var formsMap = (MapWithMyZoomControl)e.NewElement;
((MapView)Control).GetMapAsync(this);
}
}
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
var element = Element as MapWithMyZoomControl;
if (e.PropertyName == "MyZoom" && map != null)
{
if (element.MyZoom == MapWithMyZoomControl.ZoomState.zoomin)
{
map.AnimateCamera(CameraUpdateFactory.ZoomIn());
}
else if (element.MyZoom == MapWithMyZoomControl.ZoomState.zoomout)
{
map.AnimateCamera(CameraUpdateFactory.ZoomOut());
}
element.MyZoom = MapWithMyZoomControl.ZoomState.normal;
}
}
}
Aus dieser Karte Steuerung verwende ich Schaltflächen zur Steuerung der Karte vergrößern:
map.MyZoom = MapWithMyZoomControl.ZoomState.zoomin;
Es ist eine Demo, aber Sie können sie ändern, damit die Eigenschaft mit Ihrem Picker verbunden wird.
Sie müssen einen benutzerdefinierten Renderer für Ihre Auswahl verwenden. –
Warum ist das @BrunoCaceiro –