2017-05-18 26 views
1

ピンをクリックしてメソッドを実行しようとしています。私はすべてのことを正しくやっていると信じていますが、このイベントはただのトリガーではありません。 2015年から同様の質問がいくつかありますが、それらはすべてXamarin.Formsのバグを指摘しています。解決のための私のNuGetマネージャーは私のXamarin.Formsが欠陥のあるバージョンよりもずっと新しいと言います。Xamarin.Forms.Map Pin.Clicked not working

は、ここに私のコードです:

public MainPage() 
    { 
     InitializeComponent(); 

    } 

    protected async override void OnAppearing() 
    { 
     await InitializeMapAsync(); 
    } 


    public async Task InitializeMapAsync() 
    { 
     var locator = CrossGeolocator.Current; 
     var userPosition = await locator.GetLastKnownLocationAsync(); 
     var position = new Position(userPosition.Latitude, userPosition.Longitude); 


     var map = new Map(MapSpan.FromCenterAndRadius(position, Distance.FromKilometers(10))) 
     { 
      IsShowingUser = true, 
      VerticalOptions = LayoutOptions.FillAndExpand 

     }; 

     var items = await WebHelper.GetItems(position.Latitude.ToString(), position.Longitude.ToString(), "user"); 
     if(items != null) 
     { 
      foreach (var item in items) 
      { 
       var pin = new Pin() 
       { 
        Label = item.Price, 
        Position = new Position(double.Parse(item.Lat), double.Parse(item.Lng)) 
       }; 
       pin.Clicked += (object sender, EventArgs e) => 
       { 
        var p = sender as Pin; 
        DisplayAlert("Clicked", "Clicked!", "ok"); 
       }; 
       map.Pins.Add(pin); 
      } 
     } 

     var stack = new StackLayout { Spacing = 0 }; 
     stack.Children.Add(map); 
     Content = stack; 
    } 

私のピンがマップに追加されますが、私はそれらをクリックすると、彼らはちょうど私のカスタムDisplayAlert方法を実行するツールチップを表示していません。

目に見える間違いがありますか?

記録的には、Androidタブレットでテストしています。

+0

それでも[いくつかのバグ](https://bugzilla.xamarin.com/show_bug.cgi?id=40478) –

+0

が少し不安定なルックスがあるように見えます..私は、私は、プラットフォームを使用しようとすると思います特定の方法。 – mathkid91

+0

こんにちは@ mathkid91。このスレッドは少し古いですが、まだこの問題がある場合は、[ここ](https://bugzilla.xamarin.com/show_bug.cgi?id=40478)にコメントを追加したい場合があります – kizanlik

答えて

0

async voidOnAppearingに不適切に使用した場合の1回の観察で、イベントハンドラではありません。

protected override void OnAppearing() { 
    this.Appearing += Page_Appearing; 
} 

public async void Page_Appearing(object sender, EventArgs e) { 
    this.Appearing -= Page_Appearing; 
    await InitializeMapAsync(); 
}