gpt4 book ai didi

c# - 设置 mapcontrol 的 child 最顶层

转载 作者:行者123 更新时间:2023-11-30 23:09:30 26 4
gpt4 key购买 nike

我正在将堆栈面板添加到 map 控件。如下图

enter image description here

但是之前添加的一些点在我的堆栈面板的顶部。如何设置我的堆栈面板最顶层?

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));

最佳答案

您设置 ZIndex 的方法不起作用,因为 StackPanelMapItemsControl 中的项目位于不同的主机中。

借助 Live Visual Tree,您可以了解它们的具体布局方式。

enter image description here

在上面的屏幕截图中,StackPanel 的宿主(即第一个 Canvas)被放置在后面 MapOverlayPresenter 的主机(即插入 MapItemsControl 的第二个 Canvas)。因此,为了让 StackPanel 位于它们之上,您需要手动设置 first CanvasZIndex > 到 1

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

Loaded += (s, e) =>
{
// GetChildByName comes from
// https://github.com/JustinXinLiu/Continuity/blob/0cc3d7556c747a060d40bae089b80eb845da84fa/Continuity/Extensions/UtilExtensions.cs#L44
var layerGrid = mapControl.GetChildByName<Grid>("LayerGrid");
var canvas1 = layerGrid.Children.First();

Canvas.SetZIndex(canvas1, 1);
};

希望这对您有所帮助!

关于c# - 设置 mapcontrol 的 child 最顶层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45782511/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com