、私は、ユーザーが私のXAMLピッカーでオプションを選ぶときに変化する私のMapPage.xamlファイルで検出されたXAMLピッカー、中項目選択された変数を取得する必要があります。
あなたCustomMapRenderer
を作成するには、公式ドキュメントCustomizing a Mapに従った場合は、その後、PCLでは、例えば、Map
から継承するクラスがあるはずです。そして、
public class CustomMap : Map
{
}
、あなたのピッカーが別のコントロールの場合MainPage
ではCustomMap
のバインド可能なプロパティを作成し、レンダラーでOnElementPropertyChanged
をオーバーライドして、変更時にこのプロパティを取得することができます。
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
}
}
とそのレンダラーに:例えば、PCLで
map.MyZoom = MapWithMyZoomControl.ZoomState.zoomin;
:このマップ制御のうち
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;
}
}
}
は、私は地図をズームするように制御するためにボタンを使用します
デモですが、これを変更してプロパティをピッカーに接続することができます。
ピッカーにカスタムレンダラーを使用する必要があります。 –
なぜそれが@BrunoCaceiro –