必应映射WPF多触摸演示
本文关键字:触摸 WPF 映射 | 更新日期: 2023-09-27 18:13:06
我创建了一个简单的WPF应用程序,它有一个必应地图。问题是,当我尝试在PC上使用触控输入运行程序时,它变得非常不稳定:当你尝试缩放或转换地图时,它会非常滞后。顺便说一下,同样的应用程序可以在桌面上正常运行,您可以使用鼠标进行导航。而且,当你在这个触摸设备上的浏览器中打开Bing Maps时一切都没问题,所以问题在代码中,我认为与硬件无关。
我做了一些积极的步骤:现在我在代码中处理操作事件(第一次我没有实现任何映射的控制函数,所以每个操作都由默认的事件处理程序处理)。它改善了这种情况,当你尝试缩放或翻译地图时,地图不会那么滞后。
但是我有另一个问题。在应用程序工作流程中,我向地图添加了大约200条折线,当它发生时,触摸控制返回的问题和地图再次变得不稳定。
下面是项目中的一些代码:
MainWindow.xaml
<Window x:Class="NYCTraffic.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:m="clr-namespace:Microsoft.Maps.MapControl.WPF;assembly=Microsoft.Maps.MapControl.WPF"
ManipulationDelta="Window_ManipulationDelta"
Title="MainWindow" WindowState="Maximized">
<Grid>
<m:Map Name="map" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Grid.Row="0"
CredentialsProvider="myKey"
MouseLeftButtonDown="map_MouseLeftButtonDown" SupportedManipulations="Translate,Scale"
IsManipulationEnabled="True" TouchUp="map_TouchUp" AnimationLevel="None"
Center="40.714623, -74.006605" ZoomLevel="13" >
</m:Map>
</Grid>
</Window>
MainWindow.xaml.cs
public MainWindow()
{
InitializeComponent();
map.Focus();
map.ZoomLevel = DEFAULT_ZOOM;
}
private void Window_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
{
if (e.Manipulators.Count() == 1)
{
long dx = (long)-e.DeltaManipulation.Translation.X;
long dy = (long)-e.DeltaManipulation.Translation.Y;
if (Math.Abs(dx) >= SystemParameters.MinimumHorizontalDragDistance ||
Math.Abs(dy) >= SystemParameters.MinimumVerticalDragDistance)
{
var p = map.Center;
var pLocal = map.LocationToViewportPoint(p);
pLocal.Offset(dx, dy);
map.Center = map.ViewportPointToLocation(pLocal);
}
}
else
{
map.ZoomLevel = Math.Log(Math.Pow(2, map.ZoomLevel) * e.DeltaManipulation.Scale.Length / Math.Sqrt(2), 2);
}
e.Handled = true;
}
这不是程序的全部内容,但我认为它与我的问题最相关。
那么,有人有什么建议吗?Bing Maps WPF地图控件已经更新,修复了触摸功能。您可以在这里下载更新后的库:http://www.microsoft.com/en-us/download/details.aspx?id=27165
或者你也可以使用Nuget访问地图控制库:https://www.nuget.org/packages/Microsoft.Maps.MapControl.WPF/1.0.0.3