在WP8 Map控件中居中Pushpins

时间:2013-01-25 19:18:17

标签: c# .net maps windows-phone-8 pushpin

  

可能重复:
  How can I add programmatically add a PushPin, and could I make it have a custom image?

在使用bing贴图控件的WP7中,我使用了一个图像作为图钉,但由于它呈现图钉的方式略有偏移,所以我使用PositionOrigin将它正确地居中,如下所示:

 <my:Pushpin Location="{Binding Location}" 
                                    PositionOrigin="Center"MouseLeftButtonUp="pin_click"
                                    Template="{StaticResource PushpinControlTemplate1}" >
                    </my:Pushpin>

在WP8的新地图控件中,我尝试并演唱此设置,应用程序只是崩溃到App.xaml.cs中没有信息的未处理异常。

这是Windows Phone 8代码:

  toolkit:Pushpin PositionOrigin="Center"  MouseLeftButtonUp="pin_click" 
GeoCoordinate="{Binding Location1}"  Template="{StaticResource PushpinControlTemplate1}"/

他们都使用这个模板:

 <ControlTemplate x:Key="PushpinControlTemplate1" TargetType="my:Pushpin">
        <Grid>
       <Image Width="45" Height="45" Source="{Binding Arrow}"/>
        </Grid>
    </ControlTemplate>

任何想法如何抵消或集中此图钉?

编辑:示例图片:

http://www.goapr.co.uk/pins.gif

带有标准图钉的左图显示了尖端与地图上的运输停靠点匹配(应该如此)。我的自定义图像应位于右侧图像的传输站点之上,但它们不是。 PositionOrigin设置用于解决此问题,但似乎在WP8中无法实现。

1 个答案:

答案 0 :(得分:1)

PushPins已对齐,因此它们的左下角位于GeoCoordinate。这是由他们的MapOverlay PositionOrigin的默认值设置为0,1完成的。如果将MapOverlay PositionOrigin设置为0.5,0.5,MapOverlay将使其与GeoCoordinate对齐。例如,UserLocationMarker使用0.5,0.5的PositionOrigin将其视觉中心与坐标对齐。

尝试使用PushPin.PositionOrigin,看看是否能解决您的问题。 PushPin.PositionOrigin为0.5,0.5将是一个很好的起始值,取决于您尝试实现的效果。请记住,PushPin和UserLocationMarker只是花哨的MapOverlay,所以如果有疑问,请回到普通的MapOverlays来测试东西。

<!-- Default Style used for Pushpin -->
<Style TargetType="maptk:Pushpin">
    <Setter Property="PositionOrigin" Value="0,1" />
</Style>

<!-- Default Style used for MePOI -->
<Style TargetType="maptk:UserLocationMarker">
    <Setter Property="PositionOrigin" Value="0.5,0.5" />
</Style>

从WP7.5升级到WP8时,您可能遇到异常的一个原因是因为PositionOrigin已从Bing Maps自定义数据类型更改为简化的Point X,Y结构。