Как определить взаимодействие пользователя с MapControl на Windows Phone 8.1?

У меня есть MapControl и я хочу определить, панорамировал ли пользователь карту или масштабировал ее (или в основном генерировал какие-либо события указателя).

Я пробовал несколько подходов, но не смог обнаружить события указателя. Например. MyMapControl.PointerPressed += ..., MyMapControl.AddHandler(UIElement.PointerPressedEvent, ..., true), Window.Current.CoreWindow.PointerPressed +=, ((Page)this).PointerPressed +=, но они не вызываются. События для страницы и окна генерируются при касании за пределами MapControl, но никогда при касании внутри MapControl.

Если я поставлю что-то, что закрывает MapControl, например. a Rectangle, он получает события, но также потребляет их, поэтому они не достигают MapControl. Я надеюсь, что оверлей может видеть события, но не потреблять их, но пока это не удалось.

Любая помощь приветствуется!


person jonasb    schedule 24.06.2015    source источник


Ответы (1)


Событие MapTapped обрабатывает касание карты, обычное событие Tapped не работает.

Что касается панорамирования или масштабирования, я использую событие LoadingStatusChanged и ищу mapControl.LoadingStatus == MapLoadingStatus.Loaded, чтобы узнать, когда пользователь перестал манипулировать картой.

Обратите внимание, что такие вещи, как рисование элементов на карте, также вызывают LoadingStatusChanged. Если это ситуация, с которой вам нужно иметь дело, вы можете где-то сохранить центр карты и уровень масштабирования, а затем сравнить эти значения с текущим уровнем центра/масштаба карты, когда даже срабатывает, чтобы узнать, действительно ли карта была изменена.

Если вы используете интерактивность, я написал поведение, которое делает все это, если вы этого хотите.

person Paul Abbott    schedule 24.06.2015
comment
Спасибо, Пол! MapTapped срабатывает только тогда, когда пользователь нажимает на карту, а не при панорамировании или масштабировании, поэтому мою проблему это не решает. LoadingStatusChanged также запускается, когда я программно манипулирую картой, например. звонит TrySetViewAsync() - person jonasb; 25.06.2015
comment
События CenterChanged и ZoomLevelChanged дадут вам знать, когда происходит взаимодействие. - person Peter Torr - MSFT; 28.06.2015