Hi
I have a series of the type GeographicSymbolSeries showing various points on the map.
It is possible to set the MarkerType on the series and this works fine.
However I want to add a label to the symbol and therefor I seeked som inspiration in your example browser. I found this example:
<DataTemplate x:Key="shapeCityMarkerTemplate"> <Grid> <Canvas Margin="-12,-12,0,0"> <Border Canvas.Left="12" Canvas.Top="1" BorderThickness="1" CornerRadius="4"> <Border.Background> <LinearGradientBrush EndPoint="0,1"> <GradientStop Color="White" /> <GradientStop Color="#77ffffff" Offset="1" /> LinearGradientBrush> Border.Background> <Grid> <Rectangle RadiusX="3" RadiusY="3"> <Rectangle.Stroke> <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> <GradientStop Color="Transparent" Offset="0"/> <GradientStop Color="White" Offset="1"/> LinearGradientBrush> Rectangle.Stroke> Rectangle> <StackPanel Orientation="Horizontal"> <Ellipse Width="10" Height="10" StrokeThickness="1" Margin="8 3 3 3"> <Ellipse.Stroke> <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> <GradientStop Color="Transparent" Offset="0"/> <GradientStop Color="White" Offset="1"/> LinearGradientBrush> Ellipse.Stroke> <Ellipse.Fill> <RadialGradientBrush RadiusY="0.582" RadiusX="0.582" Center="0.505,0.577" GradientOrigin="0.505,0.577"> <GradientStop Color="#FF2D330B" Offset="1"/> <GradientStop Color="#FFA4BA29" Offset="0.695"/> RadialGradientBrush> Ellipse.Fill> Ellipse> <TextBlock Text="{Binding Path=Item.Name}" VerticalAlignment="Center" Margin="3 3 8 3" /> StackPanel> Grid> Border> Canvas> Grid> DataTemplate>
This will always show an Ellipse though.
Do you have some suggestion on how to combine these? Instead of the Ellipse I want to show the MarkerType set on the series, in MarkerTemplate.
This didn't seem to format as well as I had hoped. I attached a sample that demonstrates the above for clarity.
Hi logimatic,
Since our markers currently don't have built in labels your approach is on the right track. You just need to add a little bit more in order to get the marker shape itself to respect the MarkerType property. For this you can create a DataTemplateSelector that returns one of the marker templates off the XamGeographicMap itself. For example:
public class MyMarkerSelector : DataTemplateSelector { public override DataTemplate SelectTemplate(object item, DependencyObject container) { Infragistics.Controls.Charts.DataContext dc = (Infragistics.Controls.Charts.DataContext)item; var series = dc.Series as Series; var markerType = MarkerSeries.ResolveMarkerType(series, (series as MarkerSeries).MarkerType); switch (markerType) { case MarkerType.Circle: return series.SeriesViewer.CircleMarkerTemplate; case MarkerType.Diamond: return series.SeriesViewer.DiamondMarkerTemplate; case MarkerType.Hexagon: return series.SeriesViewer.HexagonMarkerTemplate; case MarkerType.Hexagram: return series.SeriesViewer.HexagramMarkerTemplate; case MarkerType.None: return base.SelectTemplate(item, container); case MarkerType.Pentagon: return series.SeriesViewer.PentagonMarkerTemplate; case MarkerType.Pentagram: return series.SeriesViewer.PentagramMarkerTemplate; case MarkerType.Pyramid: return series.SeriesViewer.PyramidMarkerTemplate; case MarkerType.Square: return series.SeriesViewer.SquareMarkerTemplate; case MarkerType.Tetragram: return series.SeriesViewer.TetragramMarkerTemplate; case MarkerType.Triangle: return series.SeriesViewer.TriangleMarkerTemplate; } return base.SelectTemplate(item, container); } }
Then inside your current DataTemplate, replace your Ellipse with this:
<ContentControl Content="{Binding}" ContentTemplateSelector="{StaticResource MyMarkerSelector}" VerticalAlignment="Center"/>
Where MyMarkerSelector is:
<local:MyMarkerSelector x:Key="MyMarkerSelector"/>