5

我正在使用最新的 Phone 7 RTM 工具(今天下载,2010 年 10 月 7 日)。

我在这里尝试做一件简单的事情:

当用户在地图控件上点击一次时,我想在那里放一个图钉。另外,我想保持地图控件的常规内置行为(点击两次以缩放)。

(如果不能同时保持这两种行为,那么可能在地图上长按以放置图钉)。

在试图弄清楚这一点时,我遇到了对 Phone7 控制图所做更改的文档:http: //msdn.microsoft.com/en-us/library/ff955762.aspx

然后我看到了新类MapInputEventArgs,它有一个 ViewportPoint 成员。

在查看常规 SilverLight 地图控件上的代码示例时,我看到了如下内容:

private void OnMouseClick(object sender, MapMouseEventArgs e)
    {
        Point clickLocation = e.ViewportPoint;
        Location location = x_Map.ViewportPointToLocation(clickLocation);

        Pushpin pushpin = new Pushpin(); 
        m_PushpinLayer.AddChild(pushpin, new Location(latitude, longitude));
    }

但是在 Phone7 的情况下,我找不到合适的事件处理程序,也找不到在地图控件中使用 MapInputEventArgs 的人。在谷歌上搜索它只能得到 1 个结果!

那么,“点击一次”的适当事件在哪里,以及在触发此事件后如何获得 ViewportPoint?

提前致谢。

4

3 回答 3

6

如果您仍然遇到问题,请弄清楚这一点。

MouseLeftButtonUp 和 MouseLeftButtonDown 事件有一个 GetPosition 方法,它将返回您正在寻找的点

 private void MapMain_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {

        Point p = e.GetPosition(this.MapMain);
        GeoCoordinate geo = new GeoCoordinate();
        geo = MapMain.ViewportPointToLocation(p);
        MapMain.ZoomLevel = 17;
        MapMain.Center = geo;
        //---create a new pushpin---
        Pushpin pin = new Pushpin();

        //---set the location for the pushpin---
        pin.Location = geo;

        //---add the pushpin to the map---
        MapMain.Children.Add(pin);
    }
于 2011-01-30T02:21:50.767 回答
3

除非我读错了你的问题,否则这似乎正是你要找的:

Silverlight - 通过 C# 将图钉添加到 Bing 地图

于 2010-11-23T02:20:51.947 回答
1

好吧,它不漂亮,但我有同样的问题,我想出了一种解决方法,当你从屏幕上松开手指时就会出现。我实例化一个布尔值:

         bool noPin = false;

然后我使用它来确定用户是否正在执行缩放或平移(这些在 MouseLeftButtonDown 和 MouseLeftButtonUp 事件之间触发)。然后,在 Up 事件中,我检查用户是否在缩放或平移,如果没有,则放置我的图钉。

    private void mHome_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        noPin = false;
    }

    private void mHome_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        if (!noPin)
            PlacePushPin();
    }

    private void mHome_MapPan(object sender, MapDragEventArgs e)
    {
        tbTemp.Text += "pan";
    }

    private void mHome_MapZoom(object sender, MapZoomEventArgs e)
    {
        tbTemp.Text += "zoom";
    }

它并不漂亮,但是,嗯,这是我能做到的最好的。

于 2010-11-06T22:00:17.547 回答