MapsUI中Polygon阻断MapClicked事件,如何取消多边形点击拦截?
MapsUI Polygon点击事件拦截问题解决方案
方案1:关闭图层级命中测试(最推荐,无需修改原有点击逻辑)
如果你的整个图层所有Polygon都不需要响应任何交互,直接给图层添加IsHitTestVisible = false配置即可,该配置会让整个图层跳过命中测试,完全不会阻断地图的MapClicked事件:
myLayer = new Layer() { IsMapInfoLayer = false, IsHitTestVisible = false, // 其余原有图层配置 };
配置后点击Polygon区域会直接触发地图的MapClicked事件,你可以在原有事件处理程序中正常获取点击位置的经纬度坐标。
方案2:在图层Info事件中直接获取经纬度
如果你需要保留图层的命中测试能力(比如部分要素需要响应点击),可以直接从图层Info事件的参数中获取点击位置的世界坐标(即经纬度),不需要做事件路由:
myLayer.Info += (sender, e) => { // e.WorldPosition即为点击位置的经纬度坐标,X对应经度,Y对应纬度 double longitude = e.WorldPosition.X; double latitude = e.WorldPosition.Y; // 直接调用原有地图点击逻辑即可 YourOriginalClickLogic(longitude, latitude); };
方案3:单样式/单要素关闭命中测试
如果同一个图层下只有部分Polygon不需要拦截点击,可以在对应Polygon的矢量样式中设置IsHitTestVisible = false,粒度更灵活:
var polygonStyle = new VectorStyle { Fill = new Brush(Color.FromRgba(0, 0, 255, 128)), Outline = new Pen(Color.Black, 2), IsHitTestVisible = false // 仅应用该样式的Polygon不会拦截点击 }; // 给不需要拦截点击的Polygon设置该样式即可
内容的提问来源于stack exchange,提问作者JoeTaicoon
相关产品推荐
相关产品推荐

