Увеличение и панорамирование в GMap.net - PullRequest
3 голосов
/ 29 февраля 2012

Я пытаюсь заставить GMap.Net управлять мультитачем, используя встроенные события WPF, но у меня ничего не получилось.

Я нашел серию статей о мультитач, таких как это и это один.Во всех них ManipulationContainer - это холст и подвижные элементы управления, размещенные на нем, но в выпуске GMap ManipulationContainer - это GMapControl, и контроль над ним отсутствует.как я могу использовать e.ManipulationDelta данные для масштабирования и перемещения?

GMapControl имеет свойство Zoom, которое, увеличивая или уменьшая его, можно увеличивать или уменьшать.

1 Ответ

3 голосов
/ 16 марта 2012

Быстрый просмотр кода показывает, что GMapControl является ItemsContainer.

У вас должна быть возможность изменить стиль шаблона ItemsPanel и указать для него свойство IsManipulationEnabled:

<g:GMapControl x:Name="Map" ...>
   <g:GMapControl.ItemsPanel>
       <ItemsPanelTemplate>
           <Canvas IsManipulationEnabled="True" />
       </ItemsPanelTemplate>
   </g:GMapControl.ItemsPanel>
   <!-- ... -->

В этот момент вам нужно подключить Window:

<Window ...
    ManipulationStarting="Window_ManipulationStarting"
    ManipulationDelta="Window_ManipulationDelta"
    ManipulationInertiaStarting="Window_InertiaStarting">

И укажите соответствующие методы в коде «Позади» (бессовестно похищенные и адаптированные из этого MSDN Walkthrough ):

void Window_ManipulationStarting(
    object sender, ManipulationStartingEventArgs e)
{
    e.ManipulationContainer = this;
    e.Handled = true;
}

void Window_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
{
    // uses the scaling value to supply the Zoom amount
    this.Map.Zoom = e.DeltaManipulation.Scale.X;
    e.Handled = true;
}

void Window_InertiaStarting(
    object sender, ManipulationInertiaStartingEventArgs e)
{
    // Decrease the velocity of the Rectangle's resizing by 
    // 0.1 inches per second every second.
    // (0.1 inches * 96 pixels per inch / (1000ms^2)
    e.ExpansionBehavior.DesiredDeceleration = 0.1 * 96 / (1000.0 * 1000.0);
    e.Handled = true;
}
...