我有一个地图,我在上面动态地显示图钉,并且希望在不与地图交互的情况下与图钉交互(所以我不能通过设置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"
发布于 2012-10-11 00:59:11
这篇文章是不久前发布的,所以你现在可能已经解决了这个问题。但我今天遇到了这个问题,这就是我的解决方案。(它不是很优雅,但似乎工作得很好)。
对我来说,这个问题发生在拖放图钉后松开它的时候--即使我在拖拽图钉时禁用了map_pan事件,地图仍然会从'flick‘手势移动,这是在拖放图钉后松开它时创建的。
首先,创建一个页面作用域DespatchTimer和一个整数,它将是我们的计数器:
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;
}
}这个过程将会在你的拖放图钉逻辑之后停止任何“轻弹”的发生。显然,这段代码可以进一步优化,但希望它能对你有所帮助。
https://stackoverflow.com/questions/11448091
复制相似问题