ArcGIS Pro 3.7 API Reference Guide
ArcGIS.Desktop.Mapping Namespace / UniqueValueRendererDefinition Class
Members Example

In This Topic
    UniqueValueRendererDefinition Class
    In This Topic
    Represents unique value renderer definition to apply a different symbol to each category of feature within the layer based on one or more fields.
    Object Model
    UniqueValueRendererDefinition ClassCIMColorRamp ClassCIMSymbolReference ClassCIMSymbolReference Class
    Syntax
    Public Class UniqueValueRendererDefinition 
       Inherits RendererDefinition
    public class UniqueValueRendererDefinition : RendererDefinition 
    Remarks
    UniqueValueRendererDefinition class allows you to define parameters to create renderers to draw features based on unique values.
    Once you define a unique value renderer, you can call a FeatureLayer's CreateRenderer and SetRenderer methods to create and assign a renderer to a feature layer.
    Example
    Set unique value renderer to the selected feature layer of the active map
    {
        //field to be used to retrieve unique values
        //Note: Run within a QueuedTask
        var fields = new List<string> { "Type" };
        //constructing a point symbol as a template symbol
        CIMPointSymbol pointSym = SymbolFactory.Instance.ConstructPointSymbol(
            ColorFactory.Instance.GreenRGB, 16.0, SimpleMarkerStyle.Pushpin);
        CIMSymbolReference symbolPointTemplate = pointSym.MakeSymbolReference();
    
        //constructing renderer definition for unique value renderer
        UniqueValueRendererDefinition uniqueValueRendererDef =
      new UniqueValueRendererDefinition(fields, symbolPointTemplate);
    
        //creating a unique value renderer
        CIMUniqueValueRenderer uniqueValueRenderer = featureLayer.CreateRenderer(uniqueValueRendererDef) as CIMUniqueValueRenderer;
    
        //setting the renderer to the feature layer
        featureLayer.SetRenderer(uniqueValueRenderer);
    }
    Unique Value Renderer for a feature layer
    /// <summary>
    /// Renders a feature layer using unique values from one or multiple fields
    /// ![Unique Value renderer](https://ArcGIS.github.io/arcgis-pro-sdk/images/Renderers/unique-value.png)
    /// </summary>
    {
      //Check feature layer name
      //Code works with the USDemographics feature layer available with the ArcGIS Pro SDK Sample data
      var featureLayer = MapView.Active.Map.GetLayersAsFlattenedList().OfType<FeatureLayer>().FirstOrDefault(f => f.Name == "USDemographics");
      if (featureLayer == null)
      {
        MessageBox.Show("This renderer works with the USDemographics feature layer available with the ArcGIS Pro SDK Sample data", "Data missing");
      }
      //construct unique value renderer definition                
      UniqueValueRendererDefinition uvr = new
               UniqueValueRendererDefinition()
      {
        //Refer to the function below to get a display field of the feature layer
        ValueFields = new List<string> { GetDisplayField(featureLayer) }, //multiple fields in the array if needed.
        ColorRamp = colorRamp, //Specify color ramp
      };
    
      //Creates a "Renderer"
      var cimRenderer = featureLayer.CreateRenderer(uvr);
    
      //Sets the renderer to the feature layer
      featureLayer.SetRenderer(cimRenderer);
    
      //Function to get the display field of a feature layer
      static string GetDisplayField(FeatureLayer featureLayer)
      {
        // get the CIM definition from the layer
        var cimFeatureDefinition = featureLayer.GetDefinition() as ArcGIS.Core.CIM.CIMBasicFeatureLayer;
        // get the view of the source table underlying the layer
        var cimDisplayTable = cimFeatureDefinition.FeatureTable;
        // this field is used as the 'label' to represent the row
        return cimDisplayTable.DisplayField;
      }
    }
    Defining a unique value renderer definition
    {
      // Note: call within QueuedTask.Run()
      {
        streamLayer = null;
        //https://geoeventsample1.esri.com:6443/arcgis/rest/services/AirportTraffics/StreamServer
    
        var uvrDef = new UniqueValueRendererDefinition()
        {
          ValueFields = new List<string> { "ACTYPE" },
          SymbolTemplate = SymbolFactory.Instance.ConstructPointSymbol(
            ColorFactory.Instance.RedRGB, 10, SimpleMarkerStyle.Hexagon)
              .MakeSymbolReference(),
          ValuesLimit = 5
        };
        //Note: CreateRenderer can only create value classes based on
        //the current events it has received
        streamLayer.SetRenderer(streamLayer.CreateRenderer(uvrDef));
      }
    }
    Inheritance Hierarchy

    System.Object
       ArcGIS.Desktop.Mapping.LayerDrawingDefinition
          ArcGIS.Desktop.Mapping.RendererDefinition
             ArcGIS.Desktop.Mapping.UniqueValueRendererDefinition

    Requirements

    Target Platforms: Windows 11 Home, Pro, Enterprise (64 bit)

    ArcGIS Pro version: 3.0 or higher.
    See Also