ArcGIS Pro 3.2 API Reference Guide
ArcGIS.Desktop.Layouts Namespace / GroupElement Class / Elements Property

In This Topic
    Elements Property (GroupElement)
    In This Topic
    Gets the read-only collection of child elements
    This property is bindable
    Parent of GroupElement
    //check the parent
    var parent = groupElement.Elements.First().GetParent();//will be the group element
    //top-most parent
    var top_most = groupElement.Elements.First().GetParent(true);//will be the GraphicsLayer
    //Convert a legend to a graphic and move the Title to the bottom of the legend and also move
    //the label in the contents pane to the bottom of the list.
    //Perform on the worker thread
    await QueuedTask.Run(() =>
      Legend leg = layout.FindElement("Legend") as Legend;
      GroupElement result = leg.ConvertToGraphics().First() as GroupElement;
      Element firstElm = result.Elements.First();  //Note: Bottom element is first in drawing order.
      foreach (Element elm in result.Elements)
        if (elm.Name == "Title")
          elm.SetY(firstElm.GetY() - 0.25);  //Move title below other legend elements
          elm.SetTOCPositionAbsolute(result, false);  // Move Title item in TOC to bottom as well
    Parent of GroupElement
    //check the parent
    var parent = groupElement.Elements.First().GetParent();//will be the group element
    //top-most parent
    //will be a GraphicsLayer or Layout
    var top_most = groupElement.Elements.First().GetParent(true);
    Select elements
    //ReportDetailsSection contains the "Fields"
    var elements = reportDetailsSection.Elements;
    Create a new field in the report
    //This is the gap between two fields
    double fieldIncrement = 0.9388875113593206276389;
    //On the QueuedTask
    //New field to add.
    var newReportField = new CIMReportField
      Name = "POP1990",
      FieldOrder = 2,
    //Get the "ReportSection element"                
    var mainReportSection = report.Elements.OfType<ReportSection>().FirstOrDefault();
    if (mainReportSection == null) return;
    //Get the "ReportDetails" within the ReportSectionElement. ReportDetails is where "fields" are.
    var reportDetailsSection = mainReportSection?.Elements.OfType<ReportDetails>().FirstOrDefault();
    if (reportDetailsSection == null) return;
    //Within ReportDetails find the envelope that encloses a field.
    //We get the first CIMParagraphTextGraphic in the collection so that we can add the new field next to it.                    
    var lastFieldGraphic = reportDetailsSection.Elements.FirstOrDefault((r) =>
      var gr = r as GraphicElement;
      if (gr == null) return false;
      return (gr.GetGraphic() is CIMParagraphTextGraphic ? true : false);
    //Get the Envelope of the last field
    var graphicBounds = lastFieldGraphic.GetBounds();
    //Min and Max values of the envelope
    var xMinOfFieldEnvelope = graphicBounds.XMin;
    var yMinOfFieldEnvelope = graphicBounds.YMin;
    var xMaxOfFieldEnvelope = graphicBounds.XMax;
    var YMaxOfFieldEnvelope = graphicBounds.YMax;
    //create the new Envelope to be offset from the existing field
    //At 2.x
    //MapPoint newMinPoint = MapPointBuilder.CreateMapPoint(xMinOfFieldEnvelope + fieldIncrement, yMinOfFieldEnvelope);
    //MapPoint newMaxPoint = MapPointBuilder.CreateMapPoint(xMaxOfFieldEnvelope + fieldIncrement, YMaxOfFieldEnvelope);
    //Envelope newFieldEnvelope = EnvelopeBuilder.CreateEnvelope(newMinPoint, newMaxPoint);
    MapPoint newMinPoint = MapPointBuilderEx.CreateMapPoint(xMinOfFieldEnvelope + fieldIncrement, yMinOfFieldEnvelope);
    MapPoint newMaxPoint = MapPointBuilderEx.CreateMapPoint(xMaxOfFieldEnvelope + fieldIncrement, YMaxOfFieldEnvelope);
    Envelope newFieldEnvelope = EnvelopeBuilderEx.CreateEnvelope(newMinPoint, newMaxPoint);
    //Create field
    GraphicElement fieldGraphic = ReportElementFactory.Instance.CreateFieldValueTextElement(reportDetailsSection, newFieldEnvelope, newReportField);

    Target Platforms: Windows 11, Windows 10

    ArcGIS Pro version: 3 or higher.
    See Also