必应地图自定义图钉不显示没有移动地图
本文关键字:地图 显示 移动 自定义 | 更新日期: 2023-09-27 17:49:17
我正在使用c#和XAML开发windows 8应用程序。该应用程序有一个地图页面,上面有自定义图钉。我使用以下代码添加自定义图钉:
<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>
一旦我启用了上面的代码,图钉不会显示,除非地图被用户移动。下面的代码用于生成映射。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>
地图XAML -
<bm:Map.Children>
<bm:MapItemsControl Name="pushPinModelsLayer"
ItemsSource="{Binding Results}"
ItemTemplate="{StaticResource pushpinSelector}" />
</bm:Map.Children>
</bm:Map>
一旦我删除了Pushpin的自定义样式,默认的Pushpin就会正确显示,而不需要移动地图。我想自定义图钉显示类似,而不需要手动移动地图。
您是否尝试过使用自定义控件为地图推送引脚
使用用户提供的控件模板创建控件,添加必要的组件、事件,做你需要的自定义。
的例子:
CustomPushPin pushpin = new CustomPushPin();
mapView.Children.Add(pushPin);
MapLayer.SetPosition(pushPin, location);
where,
- CustomPushPin您的自定义图钉用户控件。
- location的类型是location。
如果你仍然面临这个问题,请告诉我
这是一个令人沮丧的问题。
我最终的解决方案是每当我添加图钉时创建一个摆动效果。每当我更新图钉列表时,我都会更改MapBounds(通过自定义依赖属性)。
在这个方法中,我将地图边界稍微弹出,然后放大到所需的边界,如下所示:
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));
}
}
}
这会使视图自动移动,使图钉弹出。
这是一个hack,但至少它工作。另外,它的副作用是稍微弹出视图,向用户显示视图发生了变化。
希望有帮助。