将mapcontrol的子项设置为最顶层

时间:2017-08-20 13:08:16

标签: c# uwp uwp-xaml

我正在向mapcontrol添加一个stackpanel。如下所示

enter image description here

但之前添加的一些要点位于我的堆叠面板的顶部。如何设置我的stackpanel最顶层?

XAML:

<Grid x:Name="gridMain">
        <maps:MapControl
            x:Name="mapControl"
            ZoomInteractionMode="GestureAndControl"
            TiltInteractionMode="GestureAndControl"
            RotateInteractionMode="GestureAndControl">
            <!--ZoomLevel="{x:Bind ViewModel.ZoomLevel, Mode=OneWay}"
            Center="{x:Bind ViewModel.Center, Mode=OneWay}"-->


            <maps:MapItemsControl x:Name="MapItems">
                <maps:MapItemsControl.ItemTemplate>
                    <DataTemplate>
                        <Grid Tapped="MagPoint_Tapped" maps:MapControl.NormalizedAnchorPoint="{Binding NormalizedAnchorPoint}" maps:MapControl.Location="{Binding Location}">
                            <Ellipse Canvas.ZIndex="0" Width="{Binding Mag5}" Height="{Binding Mag5}" Fill="{Binding MagColor}"/>
                            <!--<TextBlock Text="{Binding Mag}"/>-->
                        </Grid>

                    </DataTemplate>
                </maps:MapItemsControl.ItemTemplate>
            </maps:MapItemsControl>
        </maps:MapControl>
    </Grid>

并添加面板代码。

StackPanel sp = new StackPanel();
            sp.Background = new SolidColorBrush(Colors.White);
            sp.CornerRadius = new CornerRadius(15);
            sp.BorderBrush = new SolidColorBrush(Colors.LightGray);
            sp.BorderThickness = new Thickness(1);
            sp.Width = 260;
            sp.MinHeight = 180;
            sp.Padding = new Thickness(10);
            Canvas.SetZIndex(sp, 99999);

mapControl.Children.Add(sp);
            Windows.UI.Xaml.Controls.Maps.MapControl.SetLocation(sp, new Geopoint(new BasicGeoposition { Longitude = (double)fi.geometry.coordinates[0], Latitude = (double)fi.geometry.coordinates[1] }));
            Windows.UI.Xaml.Controls.Maps.MapControl.SetNormalizedAnchorPoint(sp, new Point(0.5, 1));

1 个答案:

答案 0 :(得分:2)

您设置ZIndex的方式无效,因为StackPanelMapItemsControl内的项目位于不同的主机中。

Live Visual Tree 的帮助下,您可以了解它们的确切布局。

enter image description here

在上面的屏幕截图中,StackPanel的主机(即第一个Canvas)位于 MapOverlayPresenter主机后面(即第二个{} {1}}其中插入了Canvas。因此,为了让MapItemsControl位于其上方,您需要手动将第一 StackPanel的{​​{1}}设置为ZIndex。< / p>

一旦理解了这一点,解决方案就变得简单了 -

Canvas

希望这有帮助!