ZIndex кнопок в элементе управления картами WP7 - PullRequest
2 голосов
/ 16 ноября 2011

У меня есть элемент управления картой Bing silverlight для Windows Phone 7. Я пытаюсь отобразить сверху выбранную в данный момент кнопку. Вот фрагмент:

<my:Map x:Name="map" Canvas.ZIndex="1" CredentialsProvider="{StaticResource Credentials}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
                CopyrightVisibility="Collapsed" LogoVisibility="Collapsed">
            <my:MapItemsControl x:Name="Pushpins">
                <my:MapItemsControl.ItemTemplate >
                    <DataTemplate>
                        <my:Pushpin Location="{Binding Location}" Canvas.ZIndex="{Binding Zindex}" PositionOrigin="0.515625,0.859375" Content="{Binding Id}" Template="{StaticResource PushpinControlTemplate}" Tap="Pushpin_Tap"/>
                    </DataTemplate>
                </my:MapItemsControl.ItemTemplate>
            </my:MapItemsControl>
</my:Map>

Элемент управления игнорирует ZIndex. Я что-то упустил или ZIndex не поддерживается. ZIndex является свойством класса, который реализует INotifyPropertyChanged

private int _zIndex;
    public int Zindex
    {
        get { return _zIndex; }
        set
        {
            _zIndex = value;
            OnPropertyChanged(new PropertyChangedEventArgs("Zindex"));
        }
    }

Ответы [ 3 ]

10 голосов
/ 08 февраля 2012

У меня была та же проблема, когда у меня было несколько кнопок, расположенных близко друг к другу, и проблема усугублялась, когда у меня было дополнительное содержимое, которое показывалось при нажатии на кнопку.

Способ, которым я обошел эту проблему, состоял в том, чтобы удалить метку и затем снова добавить ее. Таким образом, он стал самой главной канцелярской кнопкой.

map1.Children.Remove(pushpin);
map1.Children.Add(pushpin);
2 голосов
/ 01 декабря 2011

В недавнем проекте я использовал два слоя карты для достижения этой цели.Первый слой карты был привязан к моему списку кнопок («resultsLayer»), второй слой карты был привязан к одному «SelectedItem» («selectedLayer») в моей модели представления.

2-й слой карты будетсделать поверх первого.Таким образом, когда метка на первом слое была выбрана, она была удалена из коллекции (следовательно, удалена из слоя) и установлена ​​в качестве выбранной метки, которая добавила ее во 2-й слой.Шаблон управления puspin для 2-го слоя содержал 'callout', который в моем случае представлял собой кнопку с текстом, который пользователь мог щелкнуть, чтобы открыть другую страницу.

Вот мой xaml:

    <m:Map CredentialsProvider="xxxx" x:Name="map" Center="{Binding MapCenter, Mode=TwoWay}" ZoomLevel="{Binding MapZoomLevel, Mode=TwoWay}">
        <m:MapLayer x:Name="resultsLayer" Visibility="{Binding IsBusy, Converter={StaticResource booleanNotCollapsedConverter}}">
            <m:MapItemsControl ItemsSource="{Binding VenuesFound}">
                <m:MapItemsControl.ItemTemplate>
                    <DataTemplate>
                        <m:Pushpin Location="{Binding VLocation}" PositionOrigin="BottomCenter" >
                            <m:Pushpin.Template>
                                <ControlTemplate>
                                    <Image x:Name="mapPin" Grid.Row="1" Source="{Binding MapPin}" Stretch="None" />
                                </ControlTemplate>
                            </m:Pushpin.Template>
                            <i:Interaction.Triggers>
                                <i:EventTrigger EventName="Tap">
                                    <gs:EventToCommand Command="{Binding SelectPinCommand}" />
                                </i:EventTrigger>
                            </i:Interaction.Triggers>
                        </m:Pushpin>
                    </DataTemplate>
                </m:MapItemsControl.ItemTemplate>
            </m:MapItemsControl>
        </m:MapLayer>
        <m:MapLayer x:Name="selectedLayer" DataContext="{Binding SelectedV}" Visibility="{Binding IsBusy, Converter={StaticResource booleanNotCollapsedConverter}}">
            <m:Pushpin Location="{Binding VLocation}" PositionOrigin="BottomCenter">
                <m:Pushpin.Template>
                    <ControlTemplate>
                        <StackPanel>
                            <Button Style="{StaticResource PushPinCallout}" Command="{Binding SelectItemCommand}">
                                <TextBlock Text="{Binding Name}" Foreground="White" Margin="2" TextWrapping="Wrap" />
                            </Button>
                            <Image x:Name="mapPin" Grid.Row="1" Source="{Binding MapPin}" Stretch="None" />
                        </StackPanel>
                    </ControlTemplate>
                </m:Pushpin.Template>
                <i:Interaction.Triggers>
                    <i:EventTrigger EventName="Tap">
                        <gs:EventToCommand Command="{Binding SelectPinCommand}" />
                    </i:EventTrigger>
                </i:Interaction.Triggers>
            </m:Pushpin>
        </m:MapLayer>
    </m:Map>
1 голос
/ 16 ноября 2011

Поскольку BingMapsControl не является элементом управления Silverlight, он не имеет никакого представления о канве.

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

...