我正在尝试使用WPF内置事件使GMap.Net控件启用多点触摸,但是我没有成功。
我发现了一系列有关多点触控的文章,例如this和this。在所有这些文件中,ManipulationContainer
是一个画布并在其上放置了可移动控件,但是在GMap问题中,ManipulationContainer
是GMapControl
,对此没有控件。如何使用e.ManipulationDelta
数据进行缩放和移动?GMapControl
具有Zoom
属性,通过增加或减小它,您可以放大或缩小。
最佳答案
快速查看代码即可看到GMapControl
is an 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;
}