拖动地图时 MapControl Xaml 元素滞后

Posted

技术标签:

【中文标题】拖动地图时 MapControl Xaml 元素滞后【英文标题】:MapControl Xaml Element Lagging when dragging map 【发布时间】:2014-09-10 00:34:46 【问题描述】:

我有一个 Windows Phone 运行时应用程序,我在其中使用 xaml 在地图上显示图钉。

<Maps:MapControl 
    Center="Binding GeoPoint, Mode=OneWay"
    Name="mapControl" 
    Height="270"
    MapServiceToken="token"
    ZoomLevel="1">
       <Ellipse
          Fill="Red" 
          Height="20" 
          Width="20" 
          Maps:MapControl.Location="Binding GeoPoint, Mode=OneWay"
          Maps:MapControl.NormalizedAnchorPoint="1, 0.5"/>
</Maps:MapControl>

当我拖动地图时,控件试图保持在同一位置时会出现一些滞后。

任何帮助将不胜感激。

谢谢,

【问题讨论】:

在处理相同的滞后问题时,我想知道您是否让“NormalizedAnchorPoint”正常工作。无论我做什么,无论是否绑定,它总是使用 (0,0) :/ MapControl 的 API 存在严重漏洞,我真的不鼓励任何人使用它。这是许多发现的故障之一。为了使 NormalizedAnchorPoint 正常工作,您必须将该附加属性绑定到 DataContext 中的 Point 属性 - 很糟糕的解决方法,但它可以工作。我相信从代码隐藏中分配一个值也可以解决问题。不幸的是,我无法修复地图元素的滞后。如果您发现任何可以帮助闪烁的东西,请分享! afaik normalizedanchorpoint only 允许新 Point(x,y) 的值 x 和 y 为 0 或 1。 【参考方案1】:

如果您正在对 CenterChanged 或 ZoomLevelChanged 进行一些工作,请不要这样做。我在计算这个事件中的一些东西,结果非常棒。对于像这样进行节流(使用响应式扩展)的用户,您应该会获得更流畅的体验:

Observable.FromEventPattern<object>(this.MyMap, "CenterChanged").Throttle(TimeSpan.FromSeconds(.25)).ObserveOnDispatcher().Subscribe(e => UpdateMap());
Observable.FromEventPattern<object>(this.MyMap, "ZoomLevelChanged").Throttle(TimeSpan.FromSeconds(.25)).ObserveOnDispatcher().Subscribe(e => UpdateMap());

【讨论】:

以上是关于拖动地图时 MapControl Xaml 元素滞后的主要内容,如果未能解决你的问题,请参考以下文章

关于MapControl和PageLayout地图同步的问题

UWP: MapControl 透明背景

Bing地图WPF添加位置标记

Windows Phone 8.1 绑定必应地图图钉

在 UWP MapControl 中将点投影到 3D 地形表面

MapControl为空? Windows Phone 8