我在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"/>
答案 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
。