2016-06-26 4 views
0

В моей WP 8.1 приложение, которое я имею MapControl:Значение параметра Canvas.Zindex в DataTemplate

  <Maps:MapControl x:Name="mapControl" ZoomLevelChanged="mapControl_ZoomLevelChanged" Grid.ColumnSpan="2" Grid.Column="0" Grid.Row="1"> 
       <Maps:MapItemsControl x:Name="MapIcons" ItemsSource="{Binding}" > 
        <Maps:MapItemsControl.ItemTemplate> 
         <DataTemplate> 
          <StackPanel Tapped="myStack_Tapped" Maps:MapControl.Location="{Binding GeoPoint}" Maps:MapControl.NormalizedAnchorPoint="{Binding Anchor}"> 
           <Grid x:Name="contentGrid" Background="White" Height="150" Width="220" Visibility="Collapsed"/> 
           <Image x:Name="myImage" Source="{Binding MapMarker}"/> 
          </StackPanel> 
         </DataTemplate> 
        </Maps:MapItemsControl.ItemTemplate> 
       </Maps:MapItemsControl> 
      </Maps:MapControl> 

На карте я получил маркеры, и когда я нажимаю один из них, «contentGrid» apears. Код для такого поведения:

private void myStack_Tapped(object sender, TappedRoutedEventArgs e) 
    { 
     StackPanel s = sender as StackPanel; 
     Grid contentBox = s.FindName("contentGrid") as Grid; 
     contentBox.Visibility = Visibility.Visible; 
    } 

Я хочу видеть «contentGrid» всегда выше других маркеров, но некоторые из них выше моего «contentGrid». Я попытался установить свойство Canvas.Zindex в XAML в «contentGrid», но он не работает.

I attach screenshot to exemplify my problem.

+0

Если вы хотите увидеть contentGrid выше других маркеров, установка ZIndex не поможет, потому что это будет только по отношению к панели в DataTemplate, но не к ItemsPanel MapItemsControl. Вы можете либо установить ZIndex в ItemContainerStyle, либо добавить второй MapItemsControl с contentGrids поверх первого. – Clemens

+0

@Clemens Я создал два MapItemsControl согласно вашему предложению, и он отлично работает. Спасибо, человек, ты отличный :) – druy10

ответ

0

В StackPanel стеки вертикально (по умолчанию) или по горизонтали.

Если вы хотите детей из StackPanel в «разных слоев», вам лучше заменить StackPanel в DataTemplate с Grid или Canvas

Простое решение заключается в

<DataTemplate> 
    <Grid Tapped="myStack_Tapped" Maps:MapControl.Location="{Binding GeoPoint}" Maps:MapControl.NormalizedAnchorPoint="{Binding Anchor}"> 
    <Image x:Name="myImage" Source="{Binding MapMarker}"/>   
    <Grid x:Name="contentGrid" Background="White" Height="150" Width="220" Visibility="Collapsed"/> 
    </Grid> 
</DataTemplate> 

Дать Изображение в XAML перед гридом ставит его графически.

Наконец, вы можете играть с ZIndex, если добавить в элемент Grid/Canvas другие элементы управления.

В противном случае я не уверен, что ZIndex действительно necessaray

EDIT

Canvas.ZIndex является вложенное свойство Canvas.

Но удивительно, что это работает с сеткой!

Чем больше ZIndex, тем ближе управление к глазу (над другими элементами управления)

С уважением

+0

Несчастливо он не работает с этим кодом. Тем не менее, когда я нажимаю на один из маркеров, «contentGrid» находится под маркерами. Я попытался добавить ZIndex к «contentGrid», но теперь он работает по какой-то причине. – druy10

+0

@Druy, вы заменили StackPanel, прямым потомком DataTemplate, правильно? Я тестировал решение без BingMaps, и он работает так, как я ожидал. Конечно, вам нужно отредактировать код ответного обратного вызова, чтобы учесть, что это сетка, а не панель стека. –

+0

Да, я сделал все как в вашем ответе, но теперь у меня есть что-то вроде этого: http://oi63.tinypic.com/xmtnww.jpg Как вы можете видеть, щелчок маркера исчез в Grid, а некоторые из маркеров все еще выше сетки. – druy10