<Grid x:Name="LayoutRoot">
<Grid.Resources>
<esri:SimpleFillSymbol x:Key="RedFillSymbol" Fill="#66FF0000" BorderBrush="Red" BorderThickness="2" />
<esri:Editor x:Key="MyEditor" Map="{Binding ElementName=MyMap}" EditCompleted="Editor_EditCompleted"/>
</Grid.Resources>
<esri:Map x:Name="MyMap" WrapAround="True" Background="White">
<esri:ArcGISTiledMapServiceLayer ID="PhysicalTiledLayer"
Url="http://services.arcgisonline.com/ArcGIS/rest/services/NGS_Topo_US_2D/MapServer"/>
<esri:GraphicsLayer ID="MyGraphicsLayer" MouseLeftButtonDown="GraphicsLayer_MouseLeftButtonDown" />
</esri:Map>
<StackPanel VerticalAlignment="Top" HorizontalAlignment="Center">
<Button Content="Add" DataContext="{StaticResource MyEditor}"
Command="{Binding Add}" CommandParameter="{StaticResource RedFillSymbol}"/>
<Button Content="Zoom" Click="Button_Click"/>
<CheckBox x:Name="NormalizeGeometry" Content="Normalize" IsChecked="False"/>
</StackPanel>
</Grid>
private void Button_Click(object sender, RoutedEventArgs e)
{
var l = MyMap.Layers["MyGraphicsLayer"] as GraphicsLayer;
MyMap.ZoomTo(l.FullExtent);
}
private void Editor_EditCompleted(object sender, Editor.EditEventArgs e)
{
if (e.Action == Editor.EditAction.Add)
{
foreach (var edit in e.Edits)
edit.Graphic.Attributes["OriginalGeometry"] = edit.Graphic.Geometry;
}
}
private void GraphicsLayer_MouseLeftButtonDown(object sender, GraphicMouseButtonEventArgs e)
{
var originalGeometry = e.Graphic.Attributes["OriginalGeometry"] as Polygon;
if (NormalizeGeometry.IsChecked.HasValue && NormalizeGeometry.IsChecked.Value)
e.Graphic.Geometry = Geometry.NormalizeCentralMeridian(originalGeometry);
else
e.Graphic.Geometry = originalGeometry;
}