1

我有一个动态显示图钉的地图,并且想与图钉交互而不与地图交互(所以我不能通过设置禁用地图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"

4

1 回答 1

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

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

于 2012-10-10T16:59:10.740 回答