Zoomen und Schwenken in GMap.net
-
14-11-2019 - |
Frage
Ich versuche es zu machen GMap.Net Steuerung von Multitouch aktiviert, Verwendung von integrierten WPF-Ereignissen, aber ich hatte keinen Erfolg.
Ich habe eine Reihe von Artikeln zum Thema Multitouch gefunden Das Und Das eins.In allen von ihnen, ManipulationContainer
ist eine Leinwand und darauf platzierte bewegliche Steuerelemente, jedoch in GMap-Ausgabe ManipulationContainer
Ist GMapControl
und es gibt keine Kontrolle darüber.Wie kann ich es verwenden? e.ManipulationDelta
Daten zum Zoomen und Verschieben?
Der GMapControl
hat ein Zoom
Eigenschaft, die Sie durch Erhöhen oder Verkleinern vergrößern oder verkleinern können.
Lösung
Ein kurzer Blick auf den Code zeigt, dass die GMapControl
ist ein ItemsContainer
.
Sie sollten in der Lage sein, das neu zu gestalten ItemsPanel
Vorlage und liefern Sie die IsManipulationEnabled
Grundstück dort:
<g:GMapControl x:Name="Map" ...>
<g:GMapControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas IsManipulationEnabled="True" />
</ItemsPanelTemplate>
</g:GMapControl.ItemsPanel>
<!-- ... -->
An diesem Punkt müssen Sie die Verkabelung vornehmen Window
:
<Window ...
ManipulationStarting="Window_ManipulationStarting"
ManipulationDelta="Window_ManipulationDelta"
ManipulationInertiaStarting="Window_InertiaStarting">
Und stellen Sie die entsprechenden Methoden im Code Behind bereit (schamlos gestohlen und daraus angepasst). MSDN-Komplettlösung):
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;
}