必应映射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;
}

这不是程序的全部内容,但我认为它与我的问题最相关。

那么,有人有什么建议吗?

必应映射WPF多触摸演示

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