处理固定地图上的图钉

时间:2011-02-01 15:11:33

标签: windows-phone-7 bing-maps

我有一个地图控件显示一些图钉。我不希望用户在地图中导航,因此我禁用它。但我确实希望用户能够点击图钉(如果我导航到详细页面)。

但是当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>

2 个答案:

答案 0 :(得分:1)

IsEnabled设置为false会阻止Map控件响应用户输入,这会影响您看到的孩子Pushpin。如果您希望地图为只读但Pushpin响应手势,那么我认为您有两种选择:

  1. 处理Map控件上的所有动作事件,并将e.Handled设置为true,这将阻止Map本身处理该事件,但应该离开PushPin {1}}可以自由处理点按手势。
  2. 创建WriteableBitmap的{​​{1}}并显示,然后在顶部显示Map(注意:我怀疑Pushpin控件不起作用在Pushpin控件之外,因此您需要创建/重新模板控件,使其看起来像Map)。
  3. 更新:您需要处理Pushpin以使其显示为“只读”但仍保持启用状态的事件为MapMapPan

答案 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;
}