为了更好地理解(GMapMarker) marker
,让我们看看它们是如何添加的。
标记的(UIElement) Shape
设置,通过
MainWindow
实例_
- 坐标(ao)
- 工具提示文本
到(UserControl) CustomMarkerDemo
的构造函数
// add marker
private void addMarker_Click(object sender, RoutedEventArgs e)
{
GMapMarker marker = new GMapMarker(currentMarker.Position);
{
... // ToolTipText fetching logic
marker.Shape = new CustomMarkerDemo(this, marker, ToolTipText);
marker.ZIndex = combobox.SelectedIndex;
}
MainMap.Markers.Add(marker);
}
在演示中,我使用ComboBox
'sSelectedIndex
来设置ZIndex
新标记。如您所见,标记已添加到(ObservableCollection) MainMap.Markers
. 当我们不需要它们时,很容易删除/过滤集合中的标记。这种方法的问题在于,当(UIElement) Shape
s 从视图中移除时,它们会被丢弃并需要重建。这会导致不良行为,特别是如果您希望能够一次显示所有叠加层。
相反,我选择仅向集合添加标记(通过用户交互)并基于 current 设置 sVisibility
的。Shape
combobox.SelectedIndex
// change overlays
private void combobox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ComboBox combobox = sender as ComboBox;
if (combobox != null && MainMap != null)
{
// show all overlays
if (combobox.SelectedIndex == combobox.Items.Count - 1)
{
foreach (GMapMarker marker in MainMap.Markers)
marker.Shape.Visibility = Visibility.Visible;
}
// show only selected overlay
else
{
foreach (GMapMarker marker in MainMap.Markers)
{
if (marker.ZIndex == combobox.SelectedIndex)
marker.Shape.Visibility = Visibility.Visible;
else
marker.Shape.Visibility = Visibility.Collapsed;
}
}
currentMarker.Shape.Visibility = Visibility.Visible;
}
}
我只用简单的骨架链接了一个设置,请注意这些库中有更多的功能。