2012-07-12 2 views
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"?

ответ

1

Это сообщение было некоторое время назад, поэтому вы, вероятно, решили проблему. Но сегодня у меня была эта проблема, и это решение было у меня. (он не очень элегантный, но, похоже, работает нормально).

Для меня эта проблема возникла, когда вы отпустите кнопку нажатой и перетащив ее. Несмотря на то, что я отключил событие map_pan при перетаскивании кнопки, карта все равно переместилась бы от жестов «flick», который создается, когда позволяет после того, как он перетащил его.

Прежде всего, создать страницу контекстного DespatchTimer и Int, который будет наш счетчик:

DispatcherTimer dti = new DispatcherTimer(); 
int counter =0; 

Далее в MouseLeftButton вверх случае канцелярской кнопки, в Отключив карту, запустить таймер депеши с интервалом 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; 
     } 
    } 

Этот процесс остановит любой «щелчок» из-за вашей логики выталкивания. Очевидно, что этот код можно дополнительно оптимизировать, но надеюсь, что это поможет вам.

Смежные вопросы