我有一个针对Windows phone 7的Bing silverlight地图控件。我正在尝试显示当前选定的图钉。这是片段:
<my:Map x:Name="map" Canvas.ZIndex="1" CredentialsProvider="{StaticResource Credentials}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
CopyrightVisibility="Collapsed" LogoVisibility="Collapsed">
<my:MapItemsControl x:Name="Pushpins">
<my:MapItemsControl.ItemTemplate >
<DataTemplate>
<my:Pushpin Location="{Binding Location}" Canvas.ZIndex="{Binding Zindex}" PositionOrigin="0.515625,0.859375" Content="{Binding Id}" Template="{StaticResource PushpinControlTemplate}" Tap="Pushpin_Tap"/>
</DataTemplate>
</my:MapItemsControl.ItemTemplate>
</my:MapItemsControl>
</my:Map>
控件忽略了ZIndex。我错过了什么或不支持ZIndex。 ZIndex是实现INotifyPropertyChanged
的类的属性private int _zIndex;
public int Zindex
{
get { return _zIndex; }
set
{
_zIndex = value;
OnPropertyChanged(new PropertyChangedEventArgs("Zindex"));
}
}
答案 0 :(得分:10)
我遇到了同样的问题,我将多个图钉靠近在一起,当我点击图钉时显示其他内容时,问题就更加严重了。
我解决这个问题的方法是删除图钉,然后重新添加它。这样它就成了最重要的推动力。
map1.Children.Remove(pushpin);
map1.Children.Add(pushpin);
答案 1 :(得分:2)
在最近的一个项目中,我使用了两个地图图层来实现这一目标。第一个地图图层绑定到我的图钉列表(“resultsLayer”),第二个地图图层绑定到我的视图模型上的单个“SelectedItem”(“selectedLayer”)。
第二个地图图层将在第一个地图图层的顶部呈现。因此,当选择第一层上的图钉时,将其从集合中移除(因此从图层中移除)并设置为将其添加到第二层的所选引脚。第二层的puspin控件模板包含'callout',在我的例子中是一个按钮,其中有一些文本,用户可以点击打开另一个页面。
这是我的xaml:
<m:Map CredentialsProvider="xxxx" x:Name="map" Center="{Binding MapCenter, Mode=TwoWay}" ZoomLevel="{Binding MapZoomLevel, Mode=TwoWay}">
<m:MapLayer x:Name="resultsLayer" Visibility="{Binding IsBusy, Converter={StaticResource booleanNotCollapsedConverter}}">
<m:MapItemsControl ItemsSource="{Binding VenuesFound}">
<m:MapItemsControl.ItemTemplate>
<DataTemplate>
<m:Pushpin Location="{Binding VLocation}" PositionOrigin="BottomCenter" >
<m:Pushpin.Template>
<ControlTemplate>
<Image x:Name="mapPin" Grid.Row="1" Source="{Binding MapPin}" Stretch="None" />
</ControlTemplate>
</m:Pushpin.Template>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Tap">
<gs:EventToCommand Command="{Binding SelectPinCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</m:Pushpin>
</DataTemplate>
</m:MapItemsControl.ItemTemplate>
</m:MapItemsControl>
</m:MapLayer>
<m:MapLayer x:Name="selectedLayer" DataContext="{Binding SelectedV}" Visibility="{Binding IsBusy, Converter={StaticResource booleanNotCollapsedConverter}}">
<m:Pushpin Location="{Binding VLocation}" PositionOrigin="BottomCenter">
<m:Pushpin.Template>
<ControlTemplate>
<StackPanel>
<Button Style="{StaticResource PushPinCallout}" Command="{Binding SelectItemCommand}">
<TextBlock Text="{Binding Name}" Foreground="White" Margin="2" TextWrapping="Wrap" />
</Button>
<Image x:Name="mapPin" Grid.Row="1" Source="{Binding MapPin}" Stretch="None" />
</StackPanel>
</ControlTemplate>
</m:Pushpin.Template>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Tap">
<gs:EventToCommand Command="{Binding SelectPinCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</m:Pushpin>
</m:MapLayer>
</m:Map>
答案 2 :(得分:1)
由于BingMapsControl不是Silverlight控件,因此它没有任何画布概念。
我没有尝试确保选定的一个位于前面,而是将选定的针脚更改为更大,更突出的样式。
对我来说控制引脚的z-index是没有意义的,因为这样做会造成一个引脚看起来位于另一个引脚顶部而不是地图上的情况。