从动画中禁用地图移动

时间:2012-07-12 08:45:59

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

我有一张地图,我动态显示图钉,并希望与图钉交互而不与地图交互(所以我不能通过设置IsEnabled="False"来禁用地图,也不能使用地图的图像)。

我尝试过这里描述的技术:Handling tap on Pushpin in a fixed Map,它非常适合缩放和平移。

扩展这个想法我已经为所有似乎匹配的事件设置了事件处理程序:

   Hold="map_Hold"
   MapPan="map_MapPan"
   MapZoom="Map_MapZoom"
   ManipulationStarted="map_ManipulationStarted"
   ManipulationDelta="map_ManipulationDelta"
   ManipulationCompleted="map_ManipulationCompleted"
   MouseLeftButtonDown="map_MouseLeftButtonDown"
   MouseLeftButtonUp="map_MouseLeftButtonUp"
   TargetViewChanged="map_TargetViewChanged"
   ViewChangeStart="map_ViewChangeStart"
   ViewChangeEnd="map_ViewChangeEnd"
   ViewChangeOnFrame="map_ViewChangeOnFrame"

(在事件处理程序中,我只需设置e.Handled = true;

然而,您仍然可以通过在地图上轻弹动作来平移地图(就像您将如何轻弹到照片应用中的下一个图像一样)。

有没有办法完全禁用地图平移? 或者,如果有IsEnabled="False"

,是否可以与引脚进行交互?

1 个答案:

答案 0 :(得分:1)

这篇帖子不久前,所以你现在可能已经解决了这个问题。但是我今天遇到了这个问题,这就是我的解决方案。 (它不是很优雅,但似乎工作正常)。

对我来说,在拖放它后放下图钉时会发生这个问题 - 即使我在拖动图钉时禁用了map_pan事件,地图仍会从放开时创建的“轻弹”手势移动拖放后的推针。

首先,创建一个页面范围的DespatchTimer和一个将作为我们的计数器的int:

    DispatcherTimer dti = new DispatcherTimer();
int counter =0;

接下来,在图钉的MouseLeftButton up事件中,禁用地图,以间隔1启动发送计时器。同时为它创建Tick事件处理程序。

 private void pushpin_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
Map.IsEnabled = false;
dti.Interval = new TimeSpan(0, 0, 0, 0, 1); // 1 Seconds
        dti.Start();
        dti.Tick += new EventHandler(dti_Tick);
//other code logic
}

接下来,创建dti_Tick事件。在tick事件中,当它是第二次迭代进入tick事件并重新启用地图时,停止发送计时器。重置计数器以备将来使用。

 void dti_Tick(object sender, EventArgs e)
    {
        counter++;
        if (counter>= 1)
        {
            dti.Stop();
            Map.IsEnabled = true;
            counter= 0;
        }
    }

此过程将停止拖放图钉逻辑后发生的任何“轻弹”。显然,这段代码可以进一步优化,但希望它对你有所帮助。