我需要向MapControl中添加一些元素,例如:
<Maps:MapControl HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Loaded="MapControl_Loaded" x:Name="mymap">
<Rectangle x:Name="r1" Width="100" Height="100" Fill="Red"/>
<Rectangle x:Name="r2" Width="20" Height="20" Fill="Green"/>
<Rectangle x:Name="r3" Width="20" Height="20" Fill="Blue"/>
<Rectangle x:Name="r4" Width="20" Height="20" Fill="Yellow"/>
<Rectangle x:Name="r5" Width="20" Height="20" Fill="Purple"/>
</Maps:MapControl>
我通过代码设置矩形的位置:
MapControl.SetLocation(r1, new Geopoint(new BasicGeoposition() {
Latitude = 45.6593049969524,
Longitude = 8.97672694176435
}));
MapControl.SetNormalizedAnchorPoint(r1, new Point(0.5, 0.5));
MapControl.SetLocation(r2, new Geopoint(new BasicGeoposition()
{
Latitude = 45.6592821981758,
Longitude = 8.97627767175436
}));
MapControl.SetNormalizedAnchorPoint(r2, new Point(0.5, 0.5));
MapControl.SetLocation(r3, new Geopoint(new BasicGeoposition()
{
Latitude = 45.6589662004262,
Longitude = 8.97650314494967
}));
MapControl.SetNormalizedAnchorPoint(r3, new Point(0.5, 0.5));
MapControl.SetLocation(r4, new Geopoint(new BasicGeoposition()
{
Latitude = 45.6604913715273,
Longitude = 8.97657556459308
}));
MapControl.SetNormalizedAnchorPoint(r4, new Point(0.5, 0.5));
MapControl.SetLocation(r5, new Geopoint(new BasicGeoposition()
{
Latitude = 45.6580915488303,
Longitude = 8.97816779091954
}));
矩形是从第一个(r1)到最后一个(r5)渲染的,因此r5与其他矩形重叠,r4与r3,r2,r1等等重叠。
现在我需要添加另一个矩形(r6),但是我想在r1下添加r6:
Rectangle r6 = new Rectangle();
r6.Width = 70;
r6.Height = 70;
r6.Fill = new SolidColorBrush(Colors.Coral);
mymap.Children.Insert(0, r6);
MapControl.SetLocation(r6, new Geopoint(new BasicGeoposition()
{
Latitude = 45.6594054121524,
Longitude = 8.97751081734896
}));
MapControl.SetNormalizedAnchorPoint(r6, new Point(0.5, 0.5));
我使用“ mymap.Children.Insert(0,r6);”而是使用“ Children.Add”将r6放在第一个位置,但是它不起作用,它呈现为好像是最后一个元素。
我尝试使用Canvas.SetZIndex,但在MapControl上不起作用。
所以问题是,如何将r6添加到MapControl并将其渲染为第一个元素?
最佳答案
渲染顺序取决于控件何时添加到MapControl。尽管您在第一个位置插入了矩形(r6),但是最后添加了它,因此它首先被渲染。要更改MapControl中XAML控件的呈现顺序,我们需要删除MapControl.Children中的所有控件,然后再次按正确的顺序重新添加它们,如下所示:
private void myMap_Loaded(object sender, RoutedEventArgs e)
{
//create a list to save the controls already in MapControl
var originalChildren = new List<DependencyObject>();
originalChildren = myMap.Children.ToList();
//clear the controls
myMap.Children.Clear();
Rectangle r6 = new Rectangle();
r6.Width = 70;
r6.Height = 70;
r6.Fill = new SolidColorBrush(Colors.Coral);
//re-add into MapControl
originalChildren.Insert(0, r6);
foreach (var item in originalChildren)
{
myMap.Children.Add(item);
}
MapControl.SetLocation(r1, new Geopoint(new BasicGeoposition()
{
Latitude = 45.6593049969524,
Longitude = 8.97672694176435
}));
MapControl.SetNormalizedAnchorPoint(r1, new Point(0.5, 0.5));
MapControl.SetLocation(r2, new Geopoint(new BasicGeoposition()
{
Latitude = 45.6592821981758,
Longitude = 8.97627767175436
}));
MapControl.SetNormalizedAnchorPoint(r2, new Point(0.5, 0.5));
MapControl.SetLocation(r3, new Geopoint(new BasicGeoposition()
{
Latitude = 45.6589662004262,
Longitude = 8.97650314494967
}));
MapControl.SetNormalizedAnchorPoint(r3, new Point(0.5, 0.5));
MapControl.SetLocation(r4, new Geopoint(new BasicGeoposition()
{
Latitude = 45.6604913715273,
Longitude = 8.97657556459308
}));
MapControl.SetNormalizedAnchorPoint(r4, new Point(0.5, 0.5));
MapControl.SetLocation(r5, new Geopoint(new BasicGeoposition()
{
Latitude = 45.6580915488303,
Longitude = 8.97816779091954
}));
MapControl.SetLocation(r6, new Geopoint(new BasicGeoposition()
{
Latitude = 45.6594054121524,
Longitude = 8.97751081734896
}));
MapControl.SetNormalizedAnchorPoint(r6, new Point(0.5, 0.5));
}
关于c# - 更改MapControl中的重叠顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39745832/