如何通过模板添加标记到Windows Phone 8中的地图?

时间:2013-10-02 15:10:36

标签: windows-phone-8 maps windows-phone here-api

当我尝试通过模板将用户位置标记添加到Windows Phone 8中的地图时,所有点都显示在地图的左上角。 我确信我有不同的位置这是我的代码:

            <maps:Map x:Name="myMap" Center="{Binding CenterPoint}" ZoomLevel="5">
            <toolkit:MapExtensions.Children>
                    <ItemsControl ItemsSource="{Binding AllLocations}">
                        <ItemsControl.ItemsPanel>
                            <ItemsPanelTemplate>
                                <Grid/>
                            </ItemsPanelTemplate>
                        </ItemsControl.ItemsPanel>
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                            <toolkit:MapChildControl>
                                <toolkit:UserLocationMarker Background="Blue" Foreground="Green" GeoCoordinate="{Binding coordinate,Converter={StaticResource GeoCoordinateConverter}}"/>
                            </toolkit:MapChildControl>
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>

                    </ItemsControl>
            </toolkit:MapExtensions.Children>

        </maps:Map>

1 个答案:

答案 0 :(得分:6)

不幸的是,在XAML中定义绑定不起作用。 不知道为什么。 - 可能与在运行时解析和构建XAML的方式有关。

但是,您可以在代码中设置绑定,它将起作用。

这是来自一个有效的应用程序:

<map:Map x:Name="TheMap">
    <toolkit:MapExtensions.Children>
        <toolkit:MapItemsControl>
            <toolkit:MapItemsControl.ItemTemplate>
                <DataTemplate>
                    <toolkit:Pushpin GeoCoordinate="{Binding Converter={StaticResource PinToGeoCoordinateConverter}}"
                                        Content="{Binding Name}" />
                </DataTemplate>
            </toolkit:MapItemsControl.ItemTemplate>
        </toolkit:MapItemsControl>
    </toolkit:MapExtensions.Children>
</map:Map>
页面的

Loaded事件(在后面的代码中)

private void OnLoaded(object sender, RoutedEventArgs routedEventArgs)
{
    this.Loaded -= OnLoaded;

    // Have to set up the ItemSource explicitly - unfortunately this doesn't work if set in XAML :(
    var children = MapExtensions.GetChildren(TheMap);
    var obj = children.FirstOrDefault(x => x is MapItemsControl) as MapItemsControl;

    obj.ItemsSource = ViewModel.Pins;
}