O 'pushpin' personalizado do Bing maps não aparece sem mover o mapa
estou a trabalhar numa aplicação do windows 8 usando C# e XAML. O aplicativo tem uma página de mapas que tem pushpins personalizados. Adicionei a chave personalizada usando o seguinte código:
<Style x:Key="PushPinStyle" TargetType="bm:Pushpin">
<Setter Property="Width" Value="25"/>
<Setter Property="Height" Value="39"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Image Source="Assets/pushpin_icon.png" Stretch="Uniform" HorizontalAlignment="Left"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Assim que activar o código acima, os pushpins não aparecem a menos que o mapa seja movido pelo utilizador. O seguinte código é usado para gerar o mapa. DataTemplate -
<DataTemplate x:Key="pushpinSelector" >
<bm:Pushpin Tapped="pushpinTapped" Style="{StaticResource PushPinStyle}">
<bm:MapLayer.Position >
<bm:Location Latitude="{Binding Latitude}" Longitude="{Binding Longitude}"/>
</bm:MapLayer.Position>
</bm:Pushpin>
</DataTemplate>
mapas XAML-
<bm:Map.Children>
<bm:MapItemsControl Name="pushPinModelsLayer"
ItemsSource="{Binding Results}"
ItemTemplate="{StaticResource pushpinSelector}" />
</bm:Map.Children>
</bm:Map>
logo que remova o estilo personalizado para o 'Pushpin', o 'pushpin' por omissão aparece correctamente sem necessitar de para mover o mapa. Gostaria que as pushpins cutom aparecessem da mesma forma sem necessidade de mover manualmente o mapa. Obrigado pela solução com antecedência.
2 answers
Já tentou usar um controlo personalizado para o PIN de push do mapa
Crie um controlo usando o modelo de controlo do Utilizador fornecido, adicione os componentes necessários, eventos, faça a personalização de que necessita.
Exemplo:
CustomPushPin pushpin = new CustomPushPin();
mapView.Children.Add(pushPin);
MapLayer.SetPosition(pushPin, location);
Onde,
-
Customompushpin o seu controlo personalizado do utilizador pushpin.
- a localização é do tipo de localização da classe.
Avisa-me se ainda enfrentares o problema
Neste método eu estouro os limites do mapa ligeiramente e depois amplio para os limites desejados, assim:
public static LocationRect GetMapBounds(DependencyObject obj)
{
return (LocationRect)obj.GetValue(MapBoundsProperty);
}
public static void SetMapBounds(DependencyObject obj, LocationRect value)
{
obj.SetValue(MapBoundsProperty, value);
}
public static readonly DependencyProperty MapBoundsProperty = DependencyProperty.RegisterAttached("MapBounds", typeof(LocationRect), typeof(MapBindings), new PropertyMetadata(null, OnMapBoundsChanged));
private static void OnMapBoundsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var map = d as Bing.Maps.Map;
if (map != null)
{
// sigh. "Wiggle" the view to force map pins to appear
LocationRect destRect = e.NewValue as LocationRect;
if (destRect != null)
{
LocationRect wiggleRect = new LocationRect(destRect.Center, destRect.Width + 0.001,
destRect.Height + 0.001);
map.SetView(wiggleRect, MapAnimationDuration.None);
map.SetView(destRect, new TimeSpan(0, 0, 1));
}
}
}
Isto faz com que a vista se mova automaticamente, fazendo com que os pushpins apareçam.
É um pouco ... hack, mas pelo menos funciona. Além disso, tem o efeito colateral de popping a vista um pouco para mostrar ao usuário que a vista mudou. Espero que isso ajude.