GMap.NET C#WFP:我可以将自定义UserControl添加到GMapControl叠加层吗?

时间:2016-03-01 06:41:19

标签: c# wpf xaml user-controls gmap.net

项目:c#,wpf,.net4.0,Gmap.Net.Presentation 1.7.1。

我有什么:

我的自定义MapControl类继承自GMap.NET.WindowsPresentation.GMapControl类。

public sealed class MapControl : GMapControl
{
    /* Some special data. */

    public MapConrol()
        : base()
    {
        /* Some init actions. */
    }

    /* Overrided and additional methods. */
}

例如,我有一些自定义的UserControl类。

代码:

public sealed partial class MapObjectMarkerUiControl : UserControl
{
    /* Some special data. */

    public MapObjectMarkerUiControl()
    {
        /* Some init actions. */
    }

    /* Overrided and additional methods. */
}

的Xaml:

<UserControl x:Class="MapCustomControls.MapObjectMarkerUiControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             Width="40" Height="40" RenderTransformOrigin="0.5, 0.5">
    <Grid>
        <!-- Some visual controls: text, buttons, etc. -->
    </Grid>
</UserControl>

自定义用户控件示例:

enter image description here

我需要什么:

有没有办法根据地理坐标将其添加到地图中?像这样的东西: gmap.AddCustomUserControl(UserControl customMarker, double latitude, double longitude);

可能我应该从其他类继承我的UserControl或实现一些允许将我的小部件添加到地图的Gmap.NET接口。

任何建议,提示,帮助?

P.S。如果我解决了这个问题,我会在这里发布。我想这对其他人非常有帮助。

另外,我在StackOverflow上发现了很多关于GMap的问题,等等,以及我看到Overlay类的所有地方。

GMapOverlay markersOverlay = new GMapOverlay("markers");
gmap.Overlays.Add(markersOverlay);

在我的诗句中,我没有这个。我已经在GMap类中存在内置标记叠加。

gmap.Markers - ObservableCollection of the GMapMarkers.

并且无法创建自己的叠加层并将其添加到GMapControl对象。

更新0:

我头脑中的第一个想法。例如,只需在地图上添加GMapMarkers,并使用地图对象的id添加一些特殊标记。并且GMapControl的OnRender()在屏幕上找到所有标记,解析它们的ID并在我的wpf UserControls上方绘制。但我希望GMapControl中有一些内部机制。

enter image description here

1 个答案:

答案 0 :(得分:1)

我认为解决方案比您尝试的更容易,您可以从if (cell == null || cell.getCellType() == Cell.CELL_TYPE_BLANK) { return true; } return false; 派生,例如:

GMapMarker

此标记实例允许您访问自己的class CustomMarker: GMapMarker { public string Description { get; set; } public CustomMarker(PointLatLng pos, string description) : base(pos) { Description = description; Shape = new CustomMarkerElement(); ((CustomMarkerElement)Shape).lblDesc.Content = description; } } (项目中的CustomerMarkerElement)内的UI属性:

UserControl

缺点是afaik没有办法以符合MVVM的方式使用它(例如在项目模板中定义自定义标记)。