3

WindowsPhoneエミュレーターを使用しています。私は非常に単純なプログラムを作成しました。ユーザーが地図を1回タップすると、地図上にマーカーを描画します。

次に、map_tapイベントを使用して、次のようにタップされた場所を取得します。

private void map_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
    Point p = e.GetPosition(null);
    GeoCoordinate s = map.ConvertViewportPointToGeoCoordinate(p);

    Ellipse myCircle = new Ellipse();
    myCircle.Fill = new SolidColorBrush(Colors.Blue);
    myCircle.Height = 20;
    myCircle.Width = 20;
    myCircle.Opacity = 50;

    MapOverlay myLocationOverlay = new MapOverlay();
    myLocationOverlay.Content = myCircle;
    myLocationOverlay.PositionOrigin = new Point(0, 0);
    myLocationOverlay.GeoCoordinate = s;

    MapLayer myLocationLayer = new MapLayer();
    myLocationLayer.Add(myLocationOverlay);

    map.Layers.Add(myLocationLayer);
}

問題は、私が得るポイントは、マウス(エミュレーターではマウスですが指ではありません)がクリックしたポイントではないということです。クリックした場所よりも少し離れています(約50ピクセル低くなっています)。

したがって、エミュレーターをクリックすると、クリックした場所の下に円が描画されます。これは、ある種の奇妙なことです。

私のコードに何か問題がありますか?

どうもありがとうございます。

4

1 に答える 1

6

GestureEventArgs.GetPosition()メソッドは、相対的な座標を取得するUIElementを指定するパラメーターを取ります(MSDNドキュメントを参照)。だから、やってみてください

Point p = e.GetPosition(map);

代わりは。

于 2012-12-05T04:51:03.403 に答える