CreateGroupElement Method (ElementFactory)
Create a group element from the input element collection and element
properties. This method must be called on the MCT. Use QueuedTask.Run.
Create_Empty_Group_Root
//Create an empty group element at the root level of the contents pane.
//Construct on the worker thread
await QueuedTask.Run(() =>
{
//At 2.x - GroupElement emptyGroupAtRoot = LayoutElementFactory.Instance.CreateGroupElement(layout);
// emptyGroupAtRoot.SetName("Empty group at root");
GroupElement emptyGroupAtRoot = ElementFactory.Instance.CreateGroupElement(layout, null, "Empty group at root");
});
Create_Empty_Group_Group
//Create an empty group element at the root level of another group element.
//Find an existing group element
GroupElement existingGroupAtRoot = layout.FindElement("Empty group at root") as GroupElement;
//Construct on the worker thread
await QueuedTask.Run(() =>
{
//At 2.x - GroupElement emptyGroupInGroupAtRoot = LayoutElementFactory.Instance.CreateGroupElement(existingGroupAtRoot);
// emptyGroupInGroupAtRoot.SetName("Empty group in group at root");
GroupElement emptyGroupInGroupAtRoot = ElementFactory.Instance.CreateGroupElement(
existingGroupAtRoot, null, "Empty group in group at root");
});
Create_Group_With_Single_Element_Root
//Create a group with a single element at the root level of the contents pane.
//Find an existing element
Element titleElm = layout.FindElement("Title") as Element;
//Construct on the worker thread
await QueuedTask.Run(() =>
{
//At 2.x - GroupElement groupWithSingleElementAtRoot = LayoutElementFactory.Instance.CreateGroupElement(layout, titleElm);
// groupWithSingleElementAtRoot.SetName("Group with single element at root");
GroupElement groupWithSingleElementAtRoot =
ElementFactory.Instance.CreateGroupElement(layout, new List<Element>() { titleElm }, "Group with single element at root");
});
Create_Group_With_List_Elements_Root
//Create a group with a list of elements at the root level of the contents pane.
//Find an existing elements
Element scaleBar = layout.FindElement("Scale Bar") as Element;
Element northArrow = layout.FindElement("North Arrow") as Element;
Element legend = layout.FindElement("Legend") as Element;
//Build a list and add the elements
List<Element> elmList = new List<Element>
{
scaleBar,
northArrow,
legend
};
//Construct on the worker thread
await QueuedTask.Run(() =>
{
//At 2.x - GroupElement groupWithListOfElementsAtRoot = LayoutElementFactory.Instance.CreateGroupElement(layout, elmList);
// groupWithListOfElementsAtRoot.SetName("Group with list of elements at root");
GroupElement groupWithListOfElementsAtRoot =
ElementFactory.Instance.CreateGroupElement(layout, elmList, "Group with list of elements at root");
});
Create_Group_With_List_Element_Names_Root
//Create a group using a list of element names at the root level of the contents pane.
//Build list of element names
var elmNameList = new[] { "Table Frame", "Chart Frame" };
//Construct on the worker thread
await QueuedTask.Run(() =>
{
//GroupElement groupWithListOfElementNamesAtRoot = LayoutElementFactory.Instance.CreateGroupElement(layout, elmNameList);
//groupWithListOfElementNamesAtRoot.SetName("Group with list of element names at root");
//At 3.x use FindElements to retrieve the respective elements first
var elems = layout.FindElements(elmNameList);
GroupElement groupWithListOfElementNamesAtRoot =
ElementFactory.Instance.CreateGroupElement(layout, elems, "Group with list of element names at root");
});
Creating empty group elements
//Create an empty group element at the root level of the contents pane
//Create on worker thread
await QueuedTask.Run(() =>
{
//At 2.x - GroupElement grp1 =
// LayoutElementFactory.Instance.CreateGroupElement(layout);
// grp1.SetName("Group");
//container is IElementContainer - GroupLayer or Layout
GroupElement grp1 = ElementFactory.Instance.CreateGroupElement(
container, null, "Group");
});
// *** or ***
//Create a group element inside another group element
//Find an existing group element
//container is IElementContainer - GroupLayer or Layout
GroupElement existingGroup = container.FindElement("Group") as GroupElement;
//Create on worker thread
await QueuedTask.Run(() =>
{
//At 2.x - GroupElement grp2 =
// LayoutElementFactory.Instance.CreateGroupElement(existingGroup);
// grp2.SetName("Group in Group");
GroupElement grp2 = ElementFactory.Instance.CreateGroupElement(
existingGroup, null, "Group in Group");
});
Create a group element with elements
//Create a group with a list of elements at the root level of the contents pane.
//Find an existing elements
//container is IElementContainer - GroupLayer or Layout
var elem1 = container.FindElement("Polygon 1");
var elem2 = container.FindElement("Bezier Text");
var elem3 = container.FindElement("Cloud Shape 2");
//Construct a list and add the elements
var elmList = new List<Element>
{
elem1,
elem2,
elem3
};
//Perform on the worker thread
await QueuedTask.Run(() =>
{
//At 2.x - GroupElement groupWithListOfElementsAtRoot =
// LayoutElementFactory.Instance.CreateGroupElement(layout, elmList);
//groupWithListOfElementsAtRoot.SetName("Group with list of elements at root");
//
GroupElement groupWithListOfElementsAtRoot =
ElementFactory.Instance.CreateGroupElement(
container, elmList, "Group with list of elements at root");
});
// *** or ***
//Create a group using a list of element names at the root level of the contents pane.
//List of element names
var elmNameList = new[] { "Para Text1", "Line 3" };
//Perform on the worker thread
await QueuedTask.Run(() =>
{
//At 2.x - GroupElement groupWithListOfElementNamesAtRoot =
// LayoutElementFactory.Instance.CreateGroupElement(layout, elmNameList);
// groupWithListOfElementNamesAtRoot.SetName(
// "Group with list of element names at root");
//At 3.x, use the names to find the relevant elements first
//container is IElementContainer - GroupLayer or Layout
var elems = container.FindElements(elmNameList);
GroupElement groupWithListOfElementNamesAtRoot =
ElementFactory.Instance.CreateGroupElement(
container, elems, "Group with list of element names at root");
});
Target Platforms: Windows 11, Windows 10
ArcGIS Pro version: 3 or higher.