drawObject = new Draw(MapApplication.Current.Map)
{
DrawMode = DrawMode.Point,
IsEnabled = true,
};
drawObject.DrawComplete += DrawObject_DrawComplete;private void DrawObject_DrawComplete(object sender, DrawEventArgs args)
{
MapPoint point = args.Geometry as MapPoint;
point.SpatialReference = MapApplication.Current.Map.SpatialReference;
Graphic graphic = new Graphic()
{
Geometry = point,
};
GraphicsLayer graphicsLayer = MapApplication.Current.Map.Layers["IdentifyResultsLayer"] as GraphicsLayer;
if (graphicsLayer == null)
{
graphicsLayer = createResultsLayer();
MapApplication.Current.Map.Layers.Add(graphicsLayer);
}
else
{
graphicsLayer.ClearGraphics();
}
//test attributes
graphic.Attributes.Add("ObstacleClearanceSurfaceHeight", 100);
graphic.Attributes.Add("GroundElevation", 150);
graphic.Attributes.Add("Difference", 333);
graphicsLayer.Graphics.Add(graphic);
MapApplication.Current.ShowPopup(graphic, graphicsLayer);
}Hi Ryan:
I believe the trick here is to add a graphic containing attributes to the GraphicsLayer before adding the layer to the map. Since the API does not define a way to specify a GraphicsLayer's schema, the Viewer relies on the first graphic in a layer at the time the layer is added to the map to determine this.
private void DrawObject_DrawComplete(object sender, DrawEventArgs args)
{
MapPoint point = args.Geometry as MapPoint;
point.SpatialReference = MapApplication.Current.Map.SpatialReference;
Graphic graphic = new Graphic()
{
Geometry = point,
};
//test attributes
graphic.Attributes.Add("ObstacleClearanceSurfaceHeight", 100);
graphic.Attributes.Add("GroundElevation", 150);
graphic.Attributes.Add("Difference", 333);
GraphicsLayer graphicsLayer = CreateResultsLayer();
graphicsLayer.Graphics.Add(graphic);
MapApplication.Current.Map.Layers.Add(graphicsLayer);
MapApplication.Current.ShowPopup(graphic, graphicsLayer);
}
private GraphicsLayer createResultsLayer()
{
GraphicsLayer gl = new GraphicsLayer()
{
ID = "GraphicsLayer",
Renderer = new SimpleRenderer()
{
Symbol = configDialog.Resources["RedMarkerSymbol"] as Symbol
}
};
// Set layer name in Map Contents
gl.SetValue(MapApplication.LayerNameProperty, "Graphics Results");
return gl;
}<UserControl x:Class="ViewerApplication7.AddIns.MyConfigDialog" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:esri="http://schemas.esri.com/arcgis/client/2009" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400"> <UserControl.Resources> <ResourceDictionary> <esri:SimpleMarkerSymbol x:Key="RedMarkerSymbol" Color="Red" Size="12" Style="Circle" /> </ResourceDictionary> </UserControl.Resources> <Grid x:Name="LayoutRoot" Background="Transparent"> <StackPanel Margin="10" Background="Transparent"></StackPanel> </Grid> </UserControl>[ATTACH=CONFIG]11824[/ATTACH]