1

C# を使用して Windows ストア アプリを作成していますが、マップ上の画鋲がタップされたときのメソッドについて少し助けが必要です。これまでのところ、XAML コードで作成する currentPin というプッシュピンを作成しています。ここで、pushpin_Tapped という Tapped イベントの参照も作成します。

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
        <bm:Map x:Name="MyMap" Credentials="{StaticResource BingMapsApiKey}" Holding="map_Held">

            <bm:Map.Children>
                <bm:Pushpin x:Name="pin" Tapped="pushpinTapped">

                </bm:Pushpin>
            </bm:Map.Children>
        </bm:Map>
    </Grid>

次に、MainPage.xaml.cs コードの OnNavigatedTo メソッドで currentPin を現在の場所に配置します。このプッシュピンがタップされたときのメソッドも作成します。このメソッドでは、currentPin がタップされたときのダイアログ ボックスを表示します。

private async void pushpinTapped(object sender, Windows.UI.Xaml.Input.TappedRoutedEventArgs e)
            {

                var x = MapLayer.GetPosition(pin);
                MessageDialog dialog = new MessageDialog("You are here " + x.Latitude + " " + x.Longitude);
                await dialog.ShowAsync();
            }

次に、ユーザーがマップを保持しているときに新しい画鋲を場所に配置するメソッドを用意しました。コードは次のとおりです。

private void map_Held(object sender, HoldingRoutedEventArgs e)        
{            
    Debug.WriteLine("You held at" + DateTime.Now.ToString() + "" + e.GetPosition(MyMap));            
    var pos = e.GetPosition(MyMap);            
    Location location;            
    MyMap.TryPixelToLocation(pos, out location);                          
    Pushpin pin = new Pushpin();            
    MyMap.Children.Add(pin);                        
    MapLayer.SetPosition(pin, location);                       
}

私はそれがおそらく私をじっと見つめていることを知っていますが、これらの新しいピンのそれぞれがタップされたときにメッセージボックスまたはダイアログボックスまたは何かを取得する方法について空白にしています. 誰か光を当ててくれませんか?ありがとう、エイミー

4

2 に答える 2

1

Map_Heldで、タップされたイベントのハンドラーを追加します...

private void map_Held(object sender, HoldingRoutedEventArgs e)        
{            
    Debug.WriteLine("You held at" + DateTime.Now.ToString() + "" + e.GetPosition(MyMap));            
    var pos = e.GetPosition(MyMap);            
    Location location;            
    MyMap.TryPixelToLocation(pos, out location);                          
    Pushpin newpin = new Pushpin();            
    newpin.Tapped += pushpin_Tapped;
    MyMap.Children.Add(newpin);                        
    MapLayer.SetPosition(newpin, location);                       
}

タップしたイベントハンドラーで、ピンへの参照をpin次のように変更します。

private async void pushpinTapped(object sender, Windows.UI.Xaml.Input.TappedRoutedEventArgs e)
{
    PushPin tappedpin = sender as PushPin;  // gets the pin that was tapped
    if(null == tappedpin) return;           // null check to prevent bad stuff if it wasn't a pin.
    var x = MapLayer.GetPosition(tappedpin);
    MessageDialog dialog = new MessageDialog("You are here " + x.Latitude + " " + x.Longitude);
    await dialog.ShowAsync();
}
于 2012-10-23T16:31:32.207 に答える