大家好我正试图为地图的ManipulationStarted,ManipulationDelta,ManipulationCompleted设置一个监听器,以检测用户是否拖动地图,但看起来如果拖动地图则不会启动这些事件。如果我为地图设置了一个点击监听器,则会正确启动ManipulationStarted 我做错了什么?
xaml代码:
<Controls:Map x:Name="myMap"
Grid.Row="0"
Loaded="myMap_Loaded"
ManipulationDelta="myMap_ManipulationDelta"
ManipulationCompleted="myMap_ManipulationCompleted"
ManipulationStarted="myMap_ManipulationStarted"
Tap="myMap_Tap">
代码背后的代码:
private void myMap_ManipulationDelta(object sender, System.Windows.Input.ManipulationDeltaEventArgs e)
{
Debug.WriteLine("Event:: MyMap_manipulationdelta");
}
private void myMap_ManipulationCompleted(object sender, System.Windows.Input.ManipulationCompletedEventArgs e)
{
Debug.WriteLine("Event:: MyMap_manipulationcompleted");
}
private void myMap_ManipulationStarted(object sender, System.Windows.Input.ManipulationStartedEventArgs e)
{
Debug.WriteLine("Event:: MyMap_manipulationstarted");
}
private void myMap_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
Debug.WriteLine("Event:: MyMap_tap");
}
我在普通页面上,没有转轴或全景。
答案 0 :(得分:1)
我担心你将无法处理这些事件,因为Map控件拦截了它们。虽然有一个属性UseOptimizedManipulationRouting,但正如我测试的那样 - 在这种情况下它没有多大帮助。
我不知道你想要实现什么,但如果你不需要ManipulationDeltaEventArgs,那么你可以考虑使用不同的事件,例如:MouseEnter,ResolveCompleted和CenterChanged。
如果您需要JustinAngel suggested here,则可以关注these instructions并使用Touch.FrameReported事件。
编辑 - 代码示例
如果我已经正确理解你,你想知道用户何时触摸地图,MouseEnter将不是最佳选择,因为它只能在第一次工作,然后如果鼠标没有离开地图(用户触摸了其他地方) ),它不会再次开火。这里更好的解决方案(按照上面的说明)可以是这样的代码:
public MainPage()
{
InitializeComponent();
Touch.FrameReported += Touch_FrameReported;
}
private void Touch_FrameReported(object sender, TouchFrameEventArgs e)
{
TouchPoint point = e.GetPrimaryTouchPoint(myMap);
if (point.Action == TouchAction.Move && point.Position.Y > 0)
{
MessageBox.Show("User is Moving Finger over the Map!");
}
}