Windows Phone 8(工具包)图钉跳跃/闪烁

本文关键字:跳跃 闪烁 Phone 工具包 Windows | 更新日期: 2023-09-27 18:34:53

        <maps:Map x:Name="map">
            <maptk:MapExtensions.Children>
                <maptk:MapItemsControl Name="pushpinItems">
                    <maptk:MapItemsControl.ItemTemplate>
                        <DataTemplate>
                            <maptk:Pushpin GeoCoordinate="{Binding geoCoordinateLocation}" Content="{Binding name}" PositionOrigin="0.5,0.5"/>
                        </DataTemplate>
                    </maptk:MapItemsControl.ItemTemplate>
                </maptk:MapItemsControl>
            </maptk:MapExtensions.Children>
        </maps:Map> 
    ...
    ObservableCollection<PinItem> pinsCollection = new ObservableCollection<PinItem>();

    private async void updateMap()
    {
        WebApiWorker webApi = new WebApiWorker();
        var responce = await webApi.GetAllPins();
        this.pinsCollection.Clear();
        foreach (PinItem pin in responce.array)
        {
            this.pinsCollection.Add(busActivity.MonitoredVehicleJourney);
        }
    }

我每 5 秒调用一次 updateMap(( 方法,以从 Web 服务获取更新的引脚位置。当图钉更新时,它们在屏幕上跳跃就像 5 毫米一样。

如果我设置图钉 PositionOrigin="0,0",那么大头针不再跳跃/闪烁,但由于我有椭圆图钉,它们很少被筛选。

有什么想法可以解决这个问题吗?

Windows Phone 8(工具包)图钉跳跃/闪烁

我使用自定义ControlTemplate来解决此问题:

<ControlTemplate TargetType="toolkit:Pushpin" x:Key="PinTemplate">
    <Grid x:Name="ContentGrid" FlowDirection="LeftToRight" Margin="0,-60,0,0">
        <StackPanel Orientation="Vertical">
            <Grid Background="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Background}" 
                    HorizontalAlignment="Left" 
                    MinHeight="31" 
                    MinWidth="29">
                <ContentPresenter x:Name="Presenter"
                    Content="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content}"
                    FlowDirection="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=FlowDirection}" 
                    Margin="4" VerticalAlignment="Center" HorizontalAlignment="Center"/>
            </Grid>
            <Polygon Fill="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Background}" 
                Points="0,0 29,0 0,29" 
                Width="29" 
                Height="29" 
                Margin="0,-1,0,0"
                HorizontalAlignment="Left"/>
        </StackPanel>
    </Grid>
</ControlTemplate>

然后我从我的代码创建了图钉,如下所示:

var pp = new Pushpin
{
    Background = cObject.Bcolor,
    GeoCoordinate = cObject.Coordinate,
    Content = ppIc.Convert(cObject.Name, typeof (BitmapImage), null, CultureInfo.CurrentUICulture),
    DataContext = cObject,
    Template = this.Resources["PinTemplate"] as ControlTemplate
};
pp.Tap += UIElement_OnTap;
var overlay = new MapOverlay
{
    Content = pp,
    GeoCoordinate = pp.GeoCoordinate
};
_pushpinLayer.Add(overlay);

这里的关键是在图钉模板的根级Grid上设置适当的边距,以便将所有元素移得更高,而您不必设置PositionOrigin="0,1"

我在 3d 派对网站上找到了一些解决方法:

我找到了解决方法。在清除图钉集合(导致那些跳跃的图钉(之前,我创建了贴图的位图并将其显示在地图上方。集合更新后,我再次隐藏位图。这目前有效,但需要比必要的资源更多的资源:

System.Windows.Media.Imaging.WriteableBitmap bmp = new System.Windows.Media.Imaging.WriteableBitmap((int)_map.ActualWidth,(int)_map.ActualHeight);
    bmp.Render(_map, new System.Windows.Media.TranslateTransform());
    bmp.Invalidate();
    MapImage = bmp;
    MapImageVisibility = Visibility.Visible;

但它看起来还不够好:(