无法捕获MapControl

时间:2017-01-31 16:37:13

标签: uwp

我在MapControl中绘制一个Ellipse,如下所示,当我设置“Fill”属性时,我无法在MapControl中捕获MapRightTapped消息,我该怎么办?

 <Ellipse  maps:MapControl.Location="{x:Bind CurrentLocation,Mode=OneWay}"
  Fill="#597FACFE"
  Opacity="0.3"
  Stroke="#FF81AEFF"
  StrokeThickness="2"
  Width="50"
  Height="50"
  Margin="50"/>

1 个答案:

答案 0 :(得分:0)

您已将Ellipse控件添加到MapItemsControl项集合,并且Fill属性似乎会覆盖您无法访问MapRightTapped事件的地图控件。在我看来,添加到MapItemsControl的项目是XAML控件集合,它们不应该能够监听地图相对事件。要解决此问题,您可以将MapElement集合添加到MapControl.MapElements,因为MapElement是从Windows.UI.Xaml.Controls.Maps继承的。例如,以下代码是在填充颜色的情况下向地图添加矩形,但不会阻止MapRightTapped事件句柄(您可以改为绘制Geocircle)。

 private void btnaddpologon_Click(object sender, RoutedEventArgs e)
 {
     double centerLatitude = MapMain.Center.Position.Latitude;
     double centerLongitude = MapMain.Center.Position.Longitude;
     MapPolygon mapPolygon = new MapPolygon();
     mapPolygon.Path = new Geopath(new List<BasicGeoposition>() {
         new BasicGeoposition() {Latitude=centerLatitude+5, Longitude=centerLongitude-1 },
         new BasicGeoposition() {Latitude=centerLatitude-5, Longitude=centerLongitude-1 },
         new BasicGeoposition() {Latitude=centerLatitude-5, Longitude=centerLongitude+1 },
         new BasicGeoposition() {Latitude=centerLatitude+5, Longitude=centerLongitude+1 },
     });
     mapPolygon.ZIndex = 1;
     mapPolygon.FillColor = Colors.Red;
     mapPolygon.StrokeColor = Colors.Blue;
     mapPolygon.StrokeThickness = 3;
     mapPolygon.StrokeDashed = false;
     MapMain.MapElements.Add(mapPolygon);
 }

有关添加MapElement的更多详细信息请参考official sample的方案2。但要注意我们可能不会通过XAML中的绑定添加MapElement ,我们可能只会将它们添加到后面。

另一种解决方法是,您可以捕获Ellipse MapRightTapped控件的RightTapped事件,并在此事件句柄中执行与<Maps:MapControl x:Name="MapMain" MapRightTapped="MapMain_MapRightTapped" > <Maps:MapItemsControl x:Name="MapItems"> <Ellipse x:Name="ell" ... Fill="#597FACFE" Opacity="0.3" RightTapped="ell_RightTapped"> </Ellipse> </Maps:MapItemsControl> </Maps:MapControl> 中的操作相同的操作。

 private void ell_RightTapped(object sender, RightTappedRoutedEventArgs e)
 {
     var input = e.GetPosition(ell);       
     System.Diagnostics.Debug.WriteLine("x:" + input.X + "y:" + input.Y);
 }

代码背后:

lbl.Name

但是这样我们就无法获得MapRightTappedEventArgs