我有一个地图程序,在两个叠加层上使用2个叠加标记。我遇到的问题是,如果我将鼠标悬停在叠加层[0]中的标记上,则工具提示位于叠加层[1]上的标记下方。我可以覆盖GMapBaloonTool。有没有办法提供工具提示强制它到顶部?
答案 0 :(得分:0)
3年后...
问题在于地图一张一张地绘制叠加层。每个覆盖都有自己的工具提示。稍后绘制的覆盖图绘制在其他层之上。这可能是设计使然。对我来说不好。因此,我更改了GmapOverlays.cs的OnRender方法:添加了新参数drawOnlyToolTips
。
public virtual void OnRender(Graphics g, bool drawOnlyToolTips = false)
{
if (Control != null)
{
if (Control.RoutesEnabled && !drawOnlyToolTips)
{
foreach (GMapRoute r in Routes)
{
if (r.IsVisible)
{
r.OnRender(g);
}
}
}
if (Control.PolygonsEnabled && !drawOnlyToolTips)
{
foreach (GMapPolygon r in Polygons)
{
if (r.IsVisible)
{
r.OnRender(g);
}
}
}
if (Control.MarkersEnabled)
{
// markers
if (!drawOnlyToolTips)
{
foreach (GMapMarker m in Markers)
{
//if(m.IsVisible && (m.DisableRegionCheck || Control.Core.currentRegion.Contains(m.LocalPosition.X, m.LocalPosition.Y)))
if (m.IsVisible || m.DisableRegionCheck)
{
m.OnRender(g);
}
}
}
// tooltips above
foreach (GMapMarker m in Markers)
{
//if(m.ToolTip != null && m.IsVisible && Control.Core.currentRegion.Contains(m.LocalPosition.X, m.LocalPosition.Y))
if (m.ToolTip != null && m.IsVisible && drawOnlyToolTips)
{
if (!string.IsNullOrEmpty(m.ToolTipText) && (m.ToolTipMode == MarkerTooltipMode.Always || (m.ToolTipMode == MarkerTooltipMode.OnMouseOver && m.IsMouseOver)))
{
m.ToolTip.OnRender(g);
}
}
}
}
}
}
接下来,在GMapControl.cs中,方法保护的虚拟虚空OnPaintOverlays(Graphics g)中,我更改了代码:
foreach (GMapOverlay o in Overlays)
{
if (o.IsVisibile)
{
o.OnRender(g, false); //call without drawing the tooltips
}
}
foreach (GMapOverlay o in Overlays)
{
if (o.IsVisibile)
{
o.OnRender(g, true); //draw only tooltips, after everything else is drawn
}
}