Вопрос

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

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

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

Это было полезно?

Решение

Беглый взгляд на код показывает, что 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">

И предоставьте соответствующие методы в Code Behind (бессовестно украденном и адаптированном из этого Пошаговое руководство MSDN):

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;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top