【问题标题】:Phone 7 Bing map control - Add a pushpin when tapPhone 7 Bing 地图控件 - 点击时添加图钉
【发布时间】:2010-10-07 09:54:30
【问题描述】:

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

提前致谢。

【问题讨论】:

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


    【解决方案1】:

    如果您仍然遇到问题,请解决这个问题。

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

    【讨论】:

      【解决方案2】:

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

      Silverlight - Add Pushpin to Bing Maps via C#

      【讨论】:

      • WP7 中使用的 Bing Map 控件与 Silverlight 控件略有不同。例如,WP7 控件没有 MouseClick 事件,Pushpin 没有 MouseEnter 和 MouseLeave 事件。
      【解决方案3】:

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

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

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

      【讨论】:

      • 谢谢!这实际上看起来是一个不错的解决方法。我试试看。
      • 我认为最好在 OnHold 事件中添加 pin
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多