我正在尝试构建一个功能,让用户可以使用特定颜色绘制特定要素图层。通过更改FeatureLayer.Renderer,图层上的所有注释都会更改为指定的颜色,甚至是前一个会话中的注释。我希望能够在那里使用特定颜色的旧注释,并使用它们的特定颜色(可能不同)绘制新的注释。
这是定义地图和要素图层的XAML
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="GraphicsDictionary.xaml" x:Name="LineSymbolResourceDictionary"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<Grid Name="MapGrid">
<esri:Map x:Name="MyMap">
<esri:ArcGISTiledMapServiceLayer
ID="StreetMapLayer"
x:Name="BaseMap"
Url="http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"
>
</esri:ArcGISTiledMapServiceLayer>
<esri:FeatureLayer
ID="MyFeatureLayer"
x:Name="MyFeatureLayer"
Url="http://123.123.123.12:6080/arcgis/rest/services/Prj/FeatureServer/0"
Renderer="{StaticResource BlueSimpleRenderer}"
EndSaveEdits="drawLayer_EndSaveEdits"
>
</esri:FeatureLayer>
</esri:Map>
</Grid>
资源字典:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:esriSymbols="clr-namespace:ESRI.ArcGIS.Client.Symbols;assembly=ESRI.ArcGIS.Client"
xmlns:esri="clr-namespace:ESRI.ArcGIS.Client;assembly=ESRI.ArcGIS.Client"
x:Class="ClassName.GraphicsDictionary"
>
<esri:SimpleRenderer x:Key="BlueSimpleRenderer">
<esri:SimpleRenderer.Symbol>
<esriSymbols:SimpleLineSymbol x:Name="BlueLineSymbol" Color="#00007F" Width="5"/>
</esri:SimpleRenderer.Symbol>
</esri:SimpleRenderer>
C#绘图代码:
public void StartDrawing(FeatureLayer inputLayer, string inputColorInHex)
{
MyMap.Cursor = System.Windows.Input.Cursors.Pen;
//Below's the color that might be different from the original renderer
SimpleRenderer newRend= new SimpleRenderer
{
Symbol = new SimpleLineSymbol((Color)ColorConverter.ConvertFromString(inputColorInHex), 12)
};
inputLayer.Renderer = newRend as IRenderer;
MyDrawObject.DrawMode = ESRI.ArcGIS.Client.DrawMode.Freehand;
MyDrawObject.IsEnabled = true;
}
答案 0 :(得分:0)
渲染器适用于图层中的所有要素(图形),因此如果要使用渲染器,可以使用唯一值渲染器并为不同的属性值设置不同的样式,但这意味着您知道在定义时要使用的值颜色。同样,如果要根据一系列值控制颜色,则可以使用类分解渲染器。
在您的情况下,您可能只想为要素设置特定符号,因为符号会覆盖渲染器。您只需将符号应用于图形即可使用。 e.g。
var markerSym = new Esri.ArcGISRuntime.Symbology.SimpleMarkerSymbol
{
Style = Esri.ArcGISRuntime.Symbology.SimpleMarkerStyle.Diamond,
Color = Colors.Green,
Size = 18
};
var pointGraphic = new Esri.ArcGISRuntime.Layers.Graphic(point, markerSym);
graphicsLayer.Graphics.Add(pointGraphic);