Back to Devexpress

MapCustomElementSettings.ContentTemplateSelector Property

wpf-devexpress-dot-xpf-dot-map-dot-mapcustomelementsettings-f3c59cea.md

latest12.4 KB
Original Source

MapCustomElementSettings.ContentTemplateSelector Property

Gets or sets the content template selector.

Namespace : DevExpress.Xpf.Map

Assembly : DevExpress.Xpf.Map.v25.2.dll

NuGet Package : DevExpress.Wpf.Map

Declaration

csharp
public DataTemplateSelector ContentTemplateSelector { get; set; }
vb
Public Property ContentTemplateSelector As DataTemplateSelector

Property Value

TypeDescription
DataTemplateSelector

A DataTemplateSelector object.

|

Property Paths

You can access this nested property as listed below:

Object TypePath to ContentTemplateSelector
MapCustomElementSettings

.Default .ContentTemplateSelector

|

Example

This example demonstrates how to use several templates for generated custom map elements.

To do this, specify the MapCustomElementSettings.ContentTemplateSelector property of the MapCustomElementSettings object assigned to the ListSourceDataAdapter.ItemSettings property.

xaml
<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:MapCustomElementSettings"
        xmlns:dxm="http://schemas.devexpress.com/winfx/2008/xaml/map" 
        x:Class="MapCustomElementSettings.MainWindow"
        Title="MainWindow" Height="350" Width="525"
        Loaded="Window_Loaded">
    <Window.Resources>
        <XmlDataProvider x:Key="dataSet" Source="disasters.xml" XPath="/Disasters"/>
        <DataTemplate x:Key="AirRaidsMapMarker">
            <Ellipse Fill="LightBlue" Width="20" Height="20">
                <Ellipse.RenderTransform>
                    <TranslateTransform X="-10" Y="-10"/>
                </Ellipse.RenderTransform>
            </Ellipse>
        </DataTemplate>
        <DataTemplate x:Key="BushfiresMapMarker">
            <Ellipse Fill="Firebrick" Width="20" Height="20">
                <Ellipse.RenderTransform>
                    <TranslateTransform X="-10" Y="-10"/>
                </Ellipse.RenderTransform>
            </Ellipse>
        </DataTemplate>
        <DataTemplate x:Key="CycloneMapMarker">
            <Ellipse Fill="LightSlateGray" Width="20" Height="20">
                <Ellipse.RenderTransform>
                    <TranslateTransform X="-10" Y="-10"/>
                </Ellipse.RenderTransform>
            </Ellipse>
        </DataTemplate>
        <DataTemplate x:Key="EpidemicMapMarker">
            <Ellipse Fill="DarkOliveGreen" Width="20" Height="20">
                <Ellipse.RenderTransform>
                    <TranslateTransform X="-10" Y="-10"/>
                </Ellipse.RenderTransform>
            </Ellipse>
        </DataTemplate>
        <DataTemplate x:Key="SinkingMapMarker">
            <Ellipse Fill="Blue" Width="20" Height="20">
                <Ellipse.RenderTransform>
                    <TranslateTransform X="-10" Y="-10"/>
                </Ellipse.RenderTransform>
            </Ellipse>
        </DataTemplate>
        <DataTemplate x:Key="tooltipTemplate">
            <StackPanel Orientation="Vertical" Margin="4">
                <StackPanel Orientation="Horizontal">
                    <TextBlock Padding="4" Text="Disaster Type:" Foreground="#FFE2E2E2" FontSize="18"/>
                    <TextBlock Padding="4" Text="{Binding Item.Type}" Foreground="#FFE2E2E2" FontSize="18"/>
                </StackPanel>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Padding="4,2,2,2" Text="Location:" Foreground="#FFE2E2E2" FontSize="14"/>
                    <TextBlock Padding="2,2,2,4" Text="{Binding Item.LocationName}" Foreground="#FFE2E2E2" FontSize="14"/>
                </StackPanel>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Padding="4,2,2,4" Text="Deaths:" Foreground="#FFE2E2E2" FontSize="14"/>
                    <TextBlock Padding="4,2,2,4" Text="{Binding Item.Deaths}" Foreground="#FFE2E2E2" FontSize="14"/>
                </StackPanel>
            </StackPanel>
        </DataTemplate>
    </Window.Resources>
    <Grid>
        <dxm:MapControl CenterPoint="-25, 135" ZoomLevel="3" ToolTipEnabled="True">
            <dxm:ImageTilesLayer>
                <dxm:BingMapDataProvider BingKey="Your Bing Key"/>
            </dxm:ImageTilesLayer>
            <dxm:VectorLayer ToolTipContentTemplate="{StaticResource tooltipTemplate}">
                <dxm:ListSourceDataAdapter DataSource="{Binding Disasters}">
                    <dxm:ListSourceDataAdapter.AttributeMappings>
                        <dxm:MapItemAttributeMapping Name="LocationName" Member="LocationName"/>
                        <dxm:MapItemAttributeMapping Name="Type" Member="Type"/>
                        <dxm:MapItemAttributeMapping Name="Deaths" Member="Deaths"/>
                    </dxm:ListSourceDataAdapter.AttributeMappings>
                    <dxm:ListSourceDataAdapter.Mappings>
                        <dxm:MapItemMappingInfo Latitude="LocationLatitude" 
                                                Longitude="LocationLongitude"/>
                    </dxm:ListSourceDataAdapter.Mappings>
                    <dxm:ListSourceDataAdapter.ItemSettings>
                        <dxm:MapCustomElementSettings>
                            <dxm:MapCustomElementSettings.ContentTemplateSelector>
                                <local:MarkerTemplateSelector 
                                    AirRaidsDataTemplate="{StaticResource AirRaidsMapMarker}"
                                    BushfiresDataTemplate="{StaticResource BushfiresMapMarker}"
                                    CycloneDataTemplate="{StaticResource CycloneMapMarker}"
                                    EpidemicDataTemplate="{StaticResource EpidemicMapMarker}"
                                    SinkingDataTemplate="{StaticResource SinkingMapMarker}"/>
                            </dxm:MapCustomElementSettings.ContentTemplateSelector>
                        </dxm:MapCustomElementSettings>
                    </dxm:ListSourceDataAdapter.ItemSettings>
                </dxm:ListSourceDataAdapter>
            </dxm:VectorLayer>
        </dxm:MapControl>
    </Grid>
</Window>
vb
Imports System.Collections.Generic
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Documents
Imports System.Xml
Imports System.Xml.Serialization
Imports DevExpress.Xpf.Map

Namespace MapCustomElementSettings
    Partial Public Class MainWindow
        Inherits Window

        Private Const filepath As String = "..//..//disasters.xml"

        Private disasters_Renamed As List(Of Disaster)
        Public ReadOnly Property Disasters() As List(Of Disaster)
            Get
                Return disasters_Renamed
            End Get
        End Property

        Public Sub New()
            InitializeComponent()
        End Sub

        Private Sub Window_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs)
            disasters_Renamed = DeserializeXml(filepath)
            Me.DataContext = Me
        End Sub

        Private Function DeserializeXml(ByVal filepath As String) As List(Of Disaster)
            Dim serializer As New XmlSerializer(GetType(List(Of Disaster)))
            Dim reader As XmlReader = New XmlTextReader(filepath)
            Dim data As List(Of Disaster) = DirectCast(serializer.Deserialize(reader), List(Of Disaster))
            reader.Close()

            Return data
        End Function
    End Class

    Friend Class MarkerTemplateSelector
        Inherits DataTemplateSelector

        Public Property AirRaidsDataTemplate() As DataTemplate
        Public Property BushfiresDataTemplate() As DataTemplate
        Public Property CycloneDataTemplate() As DataTemplate
        Public Property SinkingDataTemplate() As DataTemplate
        Public Property EpidemicDataTemplate() As DataTemplate

        Public Overrides Function SelectTemplate(ByVal item As Object, ByVal container As DependencyObject) As DataTemplate
            Dim disaster As Disaster = TryCast(item, Disaster)
            If disaster Is Nothing Then
                Return MyBase.SelectTemplate(item, container)
            End If

            Select Case disaster.Type
                Case "Air Raids"
                    Return AirRaidsDataTemplate
                Case "Bushfires"
                    Return BushfiresDataTemplate
                Case "Cyclone"
                    Return CycloneDataTemplate
                Case "Sinking"
                    Return SinkingDataTemplate
                Case "Epidemic"
                    Return EpidemicDataTemplate
                Case Else
                    Return MyBase.SelectTemplate(item, container)
            End Select
        End Function
    End Class

    Public Class Disaster
        Public Property Type() As String
        Public Property LocationLatitude() As Double
        Public Property LocationLongitude() As Double
        Public Property LocationName() As String
        Public Property Deaths() As Integer
    End Class
End Namespace
csharp
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Xml;
using System.Xml.Serialization;
using DevExpress.Xpf.Map;

namespace MapCustomElementSettings {
    public partial class MainWindow : Window {
        const string filepath = "..//..//disasters.xml";

        List<Disaster> disasters;
        public List<Disaster> Disasters { get { return disasters; } }

        public MainWindow() {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e) {
            disasters = DeserializeXml(filepath);
            this.DataContext = this;
        }

        List<Disaster> DeserializeXml(string filepath) {
            XmlSerializer serializer = new XmlSerializer(typeof(List<Disaster>));
            XmlReader reader = new XmlTextReader(filepath);
            List<Disaster> data = (List<Disaster>)serializer.Deserialize(reader);
            reader.Close();

            return data;
        }
    }

    class MarkerTemplateSelector : DataTemplateSelector {
        public DataTemplate AirRaidsDataTemplate { get; set; }
        public DataTemplate BushfiresDataTemplate { get; set; }
        public DataTemplate CycloneDataTemplate { get; set; }
        public DataTemplate SinkingDataTemplate { get; set; }
        public DataTemplate EpidemicDataTemplate { get; set; }

        public override DataTemplate SelectTemplate(object item, DependencyObject container) {
            Disaster disaster = item as Disaster;
            if (disaster == null) return base.SelectTemplate(item, container);

            switch (disaster.Type) {
                case "Air Raids": return AirRaidsDataTemplate;
                case "Bushfires": return BushfiresDataTemplate;
                case "Cyclone": return CycloneDataTemplate;
                case "Sinking": return SinkingDataTemplate;
                case "Epidemic": return EpidemicDataTemplate;
                default: return base.SelectTemplate(item, container);
            }
        }
    }

    public class Disaster {
        public string Type { get; set; }
        public double LocationLatitude { get; set; }
        public double LocationLongitude { get; set; }
        public string LocationName { get; set; }
        public int Deaths { get; set; }
    }
}

See Also

MapCustomElementSettings Class

MapCustomElementSettings Members

DevExpress.Xpf.Map Namespace