我有一张地图,我动态显示图钉,并希望与图钉交互而不与地图交互(所以我不能通过设置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"
?
答案 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;
}
}
此过程将停止拖放图钉逻辑后发生的任何“轻弹”。显然,这段代码可以进一步优化,但希望它对你有所帮助。