我有一个地图控件显示一些图钉。我不希望用户在地图中导航,因此我禁用它。但我确实希望用户能够点击图钉(如果我导航到详细页面)。
但是当Map.IsEnabled为false时,Pushpins似乎也没有收到任何手势。我也尝试过使用IsHitTestVisible,但没有运气。
一些代码显示了我正在尝试做的事情。有没有人有任何想法?
<maps:Map Name="Map"
VerticalAlignment="Stretch" HorizontalAlignment="Stretch"
CopyrightVisibility="Collapsed" LogoVisibility="Collapsed" ScaleVisibility="Collapsed" ZoomBarVisibility="Collapsed"
IsEnabled="False">
<maps:MapItemsControl ItemsSource="{Binding TheCollection}">
<maps:MapItemsControl.ItemTemplate>
<DataTemplate>
<maps:Pushpin Name="Pin" Location="{Binding Coordinate}" Content="{Binding Ix}">
<maps:Pushpin.Background>
<SolidColorBrush Color="{StaticResource PhoneAccentColor}"/>
</maps:Pushpin.Background>
<toolkit:GestureService.GestureListener>
<toolkit:GestureListener Tap="PinTap" />
</toolkit:GestureService.GestureListener>
</maps:Pushpin>
</DataTemplate>
</maps:MapItemsControl.ItemTemplate>
</maps:MapItemsControl>
</maps:Map>
答案 0 :(得分:1)
将IsEnabled
设置为false
会阻止Map
控件响应用户输入,这会影响您看到的孩子Pushpin
。如果您希望地图为只读但Pushpin
响应手势,那么我认为您有两种选择:
Map
控件上的所有动作事件,并将e.Handled
设置为true
,这将阻止Map
本身处理该事件,但应该离开PushPin
{1}}可以自由处理点按手势。WriteableBitmap
的{{1}}并显示,然后在顶部显示Map
(注意:我怀疑Pushpin
控件不起作用在Pushpin
控件之外,因此您需要创建/重新模板控件,使其看起来像Map
)。更新:您需要处理Pushpin
以使其显示为“只读”但仍保持启用状态的事件为Map
和MapPan
。
答案 1 :(得分:1)
所以这是我经过大量测试和浏览MSDN之后的解决方法。事实证明,Windows Phone上的Map控件有些不同(参见MSDN)。与普通的Silverlight相比,有新的行为和事件。
<maps:Map Name="Map"
VerticalAlignment="Stretch" HorizontalAlignment="Stretch"
CopyrightVisibility="Collapsed" LogoVisibility="Collapsed" ScaleVisibility="Collapsed" ZoomBarVisibility="Collapsed"
MapZoom="Map_MapZoom" MapPan="Map_MapPan">
<maps:MapItemsControl ItemsSource="{Binding TheCollection}">
<maps:MapItemsControl.ItemTemplate>
<DataTemplate>
<maps:Pushpin Name="Pin" Location="{Binding Coordinate}" Content="{Binding Ix}">
<maps:Pushpin.Background>
<SolidColorBrush Color="{StaticResource PhoneAccentColor}"/>
</maps:Pushpin.Background>
<toolkit:GestureService.GestureListener>
<toolkit:GestureListener Tap="PinTap" />
</toolkit:GestureService.GestureListener>
</maps:Pushpin>
</DataTemplate>
</maps:MapItemsControl.ItemTemplate>
</maps:MapItemsControl>
</maps:Map>
...
private void Map_MapPan(object sender, MapDragEventArgs e)
{
e.Handled = true;
}
private void Map_MapZoom(object sender, MapZoomEventArgs e)
{
e.Handled = true;
}