What I do is implement IRenderer along with the PlotObjectSymbol class: like this, ControlTemplate in App.xaml: <ControlTemplate x:Key="cntltemplate"> <StackPanel Orientation="Horizontal"> <Image Source="{Binding Symbol.ImageSource, Converter={StaticResource StringToImageSourceConverter}}"/> <TextBlock Text="{Binding Symbol.LabelText}" /> </StackPanel> </ControlTemplate> StringToImageSourceConverter is an IValueConverter implementation that converts strings to an ImageSource. public class PlotObjectSymbol : ESRI.ArcGIS.Client.Symbols.MarkerSymbol { public PlotObjectSymbol() { ControlTemplate = Application.Current.Resources["cntltemplate"] as ControlTemplate; } public string LabelText { get { return (string) base.GetValue(LabelTextProperty); } set { base.SetValue(LabelTextProperty, value); } } public static DependencyProperty LabelTextProperty = DependencyProperty.Register("LabelText", typeof (string), typeof (PlotObjectSymbol), new UIPropertyMetadata(string.Empty)); public string ImageSource { get { return (string)base.GetValue(ImageSourceProperty); } set { base.SetValue(ImageSourceProperty, value); } } public static DependencyProperty ImageSourceProperty = DependencyProperty.Register("ImageSource", typeof(string), typeof(PlotObjectSymbol), new UIPropertyMetadata(string.Empty)); } public class LabelRenderer : IRenderer { public Symbol GetSymbol(Graphic graphic) { var pt = new PlotObjectSymbol(); pt.LabelText = (string)graphic.Attributes["Name"]; pt.ImageSource = "Images/marker.png"; graphic.Symbol = pt; return graphic; } } Also, keep the ControlTemplate xaml simple, as this turns to slow down the rendering refresh rate. Another thing: <esri:Map UseAcceleratedDisplay="False" .../>
... View more