Phone 7必应地图控件 - 点击时添加一个图钉

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个结果!!
那么,“轻触一次”(Tap once)的适当事件在哪里,以及在此事件被触发后如何获取ViewportPoint?
提前感谢。
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);
    }

3

在WP7中使用的Bing地图控件与Silverlight控件略有不同。例如,WP7控件没有MouseClick事件,而Pushpin也没有MouseEnter和MouseLeave事件。 - Daniel Ballinger

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";
    }

虽然不太美观,但这是我能做到的最好了。


谢谢!这看起来是一个不错的解决方法。我会试一下。 - Yaron Levi
我认为最好在OnHold事件中添加引脚。 - Shashi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接