Zoom e panoramica in GMap.net
-
14-11-2019 - |
Domanda
Sto cercando di farlo GMap.Net controllo multitouch abilitato, utilizzando gli eventi integrati di WPF ma non ho avuto successo.
Ho trovato una serie di articoli sul multitouch come Questo E Questo uno.In tutti loro, ManipulationContainer
è una tela e controlli mobili posizionati su di essa, ma nel problema GMap ManipulationContainer
È GMapControl
e non c'è alcun controllo su di esso.come posso usare e.ManipulationDelta
dati da ingrandire e spostare?
IL GMapControl
ha un Zoom
proprietà che aumentandola o diminuendola è possibile ingrandire o rimpicciolire.
Soluzione
Un rapido sguardo al codice mostra che il file GMapControl
è un ItemsContainer
.
Dovresti essere in grado di rinnovare il file ItemsPanel
modello e fornire il file IsManipulationEnabled
proprietà lì:
<g:GMapControl x:Name="Map" ...>
<g:GMapControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas IsManipulationEnabled="True" />
</ItemsPanelTemplate>
</g:GMapControl.ItemsPanel>
<!-- ... -->
A questo punto è necessario cablare il Window
:
<Window ...
ManipulationStarting="Window_ManipulationStarting"
ManipulationDelta="Window_ManipulationDelta"
ManipulationInertiaStarting="Window_InertiaStarting">
E fornire i metodi appropriati nel Code Behind (sfacciatamente rubato e adattato da questo Soluzione 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;
}