GetSelectedElements Method (GraphicsLayerExtensions)
Gets the currently selected elements within the GraphicsLayer collection.
Parameters
- graphicsLayer
Return Value
Remove Graphic elements
//on the QueuedTask
graphicsLayer.RemoveElements(graphicsLayer.GetSelectedElements());
Un-Select Graphic elements
var graphicsLayer = MapView.Active.Map.GetLayersAsFlattenedList()
.OfType<ArcGIS.Desktop.Mapping.GraphicsLayer>().FirstOrDefault();
if (graphicsLayer == null)
return;
//unselect the first element in the currently selected elements
var elem = graphicsLayer.GetSelectedElements().FirstOrDefault();
QueuedTask.Run( () => {
if (elem != null)
//Unselect one element
graphicsLayer.UnSelectElement(elem);
//unselect all elements
graphicsLayer.UnSelectElements();
//equivalent to
graphicsLayer.ClearSelection();
});
Subscribe to ElementSelectionChangedEvent
ArcGIS.Desktop.Layouts.Events.ElementEvent.Subscribe((args) => {
//check if the container is a graphics layer - could be a Layout (or even map view)
if (args.Container is ArcGIS.Desktop.Mapping.GraphicsLayer graphicsLayer)
{
//get the total selection count for the container
var count = args.Elements.Count();
//Check count - could have been an unselect or clearselect
if (count > 0)
{
//this is a selection or add to selection
var elems = graphicsLayer.GetSelectedElements();
//TODO process the selection...
}
else
{
//This is an unselect or clear selection
//TODO process the unselect or clear select
}
}
});
Group Graphic Elements
var graphicsLayer = MapView.Active.Map.GetLayersAsFlattenedList()
.OfType<ArcGIS.Desktop.Mapping.GraphicsLayer>().FirstOrDefault();
if (graphicsLayer == null)
return;
var elemsToGroup = graphicsLayer.GetSelectedElements();
//Note: run within the QueuedTask
//group elements
var groupElement = graphicsLayer.GroupElements(elemsToGroup);
Un-Group Graphic Elements
var selectedElements = graphicsLayer.GetSelectedElements().ToList(); ;
if (selectedElements?.Any() == false)//must be at least 1.
return;
var elementsToUnGroup = new List<GroupElement>();
//All selected elements should be grouped.
if (selectedElements.Count() == selectedElements.OfType<GroupElement>().Count())
{
//Convert to a GroupElement list.
elementsToUnGroup = selectedElements.ConvertAll(x => (GroupElement)x);
}
if (elementsToUnGroup.Count() == 0)
return;
//UnGroup
graphicsLayer.UnGroupElements(elementsToUnGroup);
Ordering: Send backward and Bring forward
//On the QueuedTask
//get the current selection set
var sel_elems = graphicsLayer.GetSelectedElements();
//can they be brought forward? This will also check that all elements have the same parent
if (graphicsLayer.CanBringForward(sel_elems))
{
//bring forward
graphicsLayer.BringForward(sel_elems);
//bring to front (of parent)
//graphicsLayer.BringToFront(sel_elems);
}
else if (graphicsLayer.CanSendBackward(sel_elems))
{
//send back
graphicsLayer.SendBackward(sel_elems);
//send to the back (of parent)
//graphicsLayer.SendToBack(sel_elems);
}
Get Z-Order
var selElementsZOrder = graphicsLayer.GetSelectedElements();
//list out the z order
foreach (var elem in selElementsZOrder)
System.Diagnostics.Debug.WriteLine($"{elem.Name}: z-order {elem.ZOrder}");
Move Graphic Elements
//Each selected element will move to a set distance to the upper right.
var selElements = graphicsLayer.GetSelectedElements();
if (selElements.Count == 0) return;
//Move the element up
foreach (var selElement in selElements)
{
//Get the element's bounds
var elementPoly = PolygonBuilderEx.CreatePolygon(selElement.GetBounds());
//get the coordinates of the element bounding envelope.
var pointsList = elementPoly.Copy2DCoordinatesToList();
//Move the element's Anchor point to the upper right.
selElement.SetAnchorPoint(pointsList[1]);
}
Target Platforms: Windows 11, Windows 10
ArcGIS Pro version: 3 or higher.