在XAML中绑定MapIcon

时间:2016-02-01 13:48:35

标签: xaml uwp bing-maps uwp-maps

我尝试使用MapControl,为当前查看的位置显示MapIcon。

在我的XAML中,我得到了:

<Maps:MapControl x:Name="MapControl" ZoomLevel="14" Center="{Binding Geopoint, Mode=OneWay}" Margin="-12,0,-12,0" Tapped="directions_Click" Height="200" MapServiceToken="{StaticResource BingMapsKey}" PanInteractionMode="Disabled" RotateInteractionMode="Disabled">
    <Maps:MapIcon Location="{Binding Geopoint}" Title="{Binding AttractionName}" />
</Maps:MapControl>

我绑定的项目正在页面的其他位置使用(例如地图位于正确的位置),但MapIcon没有显示,也没有提供任何关于原因的提示?

据我所知from MSDN我应该能够以这种方式绑定(虽然专门针对<MapIcon>的示例是动态添加它们,但它确实显示了直接绑定的其他XAML对象XAML)。我在这里标记XAML错了吗?

3 个答案:

答案 0 :(得分:2)

我最终通过XAML构建了自己的图钉:

var book = {};
book.buntil = $scope.until;

这允许绑定位置(通过 <Maps:MapControl x:Name="MapControl" ZoomLevel="14" Center="{Binding Geopoint, Mode=OneWay}" Margin="-12,0,-12,0" Tapped="directions_Click" Height="200" MapServiceToken="{StaticResource BingMapsKey}" PanInteractionMode="Disabled" RotateInteractionMode="Disabled"> <Grid HorizontalAlignment="Left" Maps:MapControl.Location="{Binding Geopoint}" Maps:MapControl.NormalizedAnchorPoint="0,1"> <Grid.RowDefinitions> <RowDefinition Height="*" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <Border Background="{ThemeResource SystemControlBackgroundAccentBrush}" Grid.Row="0"> <TextBlock Text="{Binding AttractionName}" HorizontalAlignment="Left" /> </Border> <Polygon Points="0,0 12.5,0 0,20" Fill="{ThemeResource SystemControlBackgroundAccentBrush}" StrokeThickness="0" Grid.Row="1" /> </Grid> </Maps:MapControl> ),并且可以设置相对位置,使点保持在正确的位置(通过Maps:MapControl.Location="{Binding Geopoint}" - 即引脚内容的左下角)< / p>

虽然这不是使用MapIcon,但这样可以看出我们的应用程序如何显示Windows Phone 7.x / 8.x的位置,因此可能对其他想要类似的人有所帮助。

答案 1 :(得分:2)

正如您所提到的,LocationTitle可以绑定到GeopointAttractionName。但要在MapControl上显示MapIcon,我们需要以编程方式将MapIcon添加到其MapElements集合中。

例如:

Loaded的{​​{1}}事件。

MapControl

enter image description here

此后,private void MapControl_Loaded(object sender, RoutedEventArgs e) { MapControl.MapElements.Add(MyMapIcon); } 可以像MapIcon一样显示在图片上。但是你会发现MapControl的左上角有一串类名。

这是因为您将MapControl添加为MapControl的隐式子项。它相当于在MapIcon中添加MapIcon,就像下面的XAML代码一样。

MapItemsControl

MapItemsControl可以显示XAML用户界面元素,例如Button,HyperlinkBut​​ton或TextBlock,方法是将它们添加为MapControl的Children。 MapIcon无法在MapControl上显示,因此它显示了其类名。

作为一种解决方法,我们可以将<Maps:MapControl x:Name="MapControl" ZoomLevel="14" Center="{Binding Geopoint, Mode=OneWay}" Margin="-12,0,-12,0" Height="200" PanInteractionMode="Disabled" RotateInteractionMode="Disabled" Loaded="MapControl_Loaded"> <Maps:MapItemsControl> <Maps:MapIcon x:Name="MyMapIcon" Location="{Binding Geopoint}" Title="{Binding AttractionName}" /> </Maps:MapItemsControl> </Maps:MapControl> 放在MapIcon中以解决问题。 例如:

Resources

答案 2 :(得分:1)

我在UWP中遇到了与MapControl类似的问题。我的解决方案是使用MapControl作为ItemsControl并显示元素集合。以下代码仅显示图像,但您可以将DataTemplate的内容包含在网格中,并显示ImageTextBlock

    <Maps:MapControl>                        
        <Maps:MapItemsControl x:Name="MapItems" ItemSource="{Binding Items}">
            <Maps:MapItemsControl.ItemTemplate>
                <DataTemplate x:DataType="m:model">
                    <Image Source="{x:Bind ImgSource}" Maps:MapControl.Location="{x:Bind Location}" Width="50" Height="50" Margin="-25,-50,0,0" />
                </DataTemplate>
            </Maps:MapItemsControl.ItemTemplate>
        </Maps:MapItemsControl>
    </Maps:MapControl>

希望这有帮助!