Обработка крана на канцелярской кнопке в фиксированной карте - PullRequest
1 голос
/ 01 февраля 2011

У меня есть элемент управления Map, показывающий несколько кнопок. Я не хочу, чтобы пользователь перемещался по карте, поэтому я отключаю ее. Но я хочу, чтобы пользователь мог нажимать на канцелярскую кнопку (и в случае перехода на страницу с подробностями).

Однако, когда Map.IsEnabled имеет значение false, пушпины, похоже, также не получают никаких жестов. Я также пытался использовать 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 ]

1 голос
/ 02 февраля 2011

Итак, вот как я решил эту проблему после большого количества тестирования и просмотра MSDN.Оказывается, все немного по-другому в элементе управления Map в Windows Phone (см. 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;
}
1 голос
/ 01 февраля 2011

Установка IsEnabled в false не позволяет элементу управления Map реагировать на ввод пользователя, что влияет на дочернего элемента Pushpin, как вы видели. Если вы хотите, чтобы карта была доступна только для чтения, но Pushpin реагировала на жесты, тогда, я думаю, у вас есть два варианта:

  1. Обработайте все события жестов в элементе управления Map и установите e.Handled в true, что помешает самой Map обрабатывать событие, но должно оставить PushPin свободным для обработки жеста касания .
  2. Создайте WriteableBitmap из Map и покажите это вместо этого, а затем отобразите Pushpin сверху (ПРИМЕЧАНИЕ. Я подозреваю, что элемент управления Pushpin не будет работать вне элемента управления Map, поэтому вам нужно создать / повторно шаблонировать элемент управления, чтобы он выглядел как Pushpin).

ОБНОВЛЕНИЕ: события, которые вам нужно обработать на Map, чтобы он выглядел «только для чтения», но оставался включенным, это MapPan и MapZoom.

...