Phone 7 Bing地图控件 - 点按时添加图钉

时间:2010-10-07 09:54:31

标签: windows-phone-7 bing-maps pushpin

我正在使用最新的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?

提前致谢。

3 个答案:

答案 0 :(得分: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);
    }

答案 1 :(得分:3)

除非我错误地阅读你的问题,否则这似乎正是你所寻找的:

Silverlight - Add Pushpin to Bing Maps via C#

答案 2 :(得分: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";
    }

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