In case you use the 'default' label option and not an expression the following maptool should work:
internal class SelectLabel : MapTool
{
public SelectLabel()
{
IsSketchTool = true;
SketchType = SketchGeometryType.Rectangle;
SketchOutputMode = SketchOutputMode.Map;
}
protected override Task OnToolActivateAsync(bool active)
{
return base.OnToolActivateAsync(active);
}
protected override async Task<bool> OnSketchCompleteAsync(Geometry geometry)
{
var labels = await QueuedTask.Run<string>(() =>
{
// use the geometry to make a new selection
var selectionSet = MapView.Active.SelectFeatures(geometry, SelectionCombinationMethod.New, true, true);
if (selectionSet.Count == 0) return "nothing selected";
// Layer of interest - use only the first layer in the collection
// for this example. You can search for specific layer using Linq
var selectedFeatureLayer = selectionSet.Keys.FirstOrDefault() as FeatureLayer;
// Get the selected Oids
var oids = selectionSet[selectedFeatureLayer];
// get the CIM definition from the layer
var cimFeatureDefinition = selectedFeatureLayer.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
var displayField = cimDisplayTable.DisplayField;
// collect all
var sb = new StringBuilder();
// search for all selected object ids
using (RowCursor rowCursor = selectedFeatureLayer.Search(new QueryFilter() { ObjectIDs = oids }))
{
// Iterate through the selected features
var labelFieldIndex = rowCursor.FindField(displayField);
while (rowCursor.MoveNext())
{
using (var row = rowCursor.Current) {
// Get the label field value
var labelForFeature = row[labelFieldIndex].ToString();
sb.AppendLine($@"oid: {row.GetObjectID()} label: {labelForFeature}");
}
}
}
return sb.ToString();
});
MessageBox.Show(labels);
return true;
}
}
If the layer's label is defined by an expression (i.e. Arcade) there is no solution at this point. However, the Pro Dev team is working on providing script evaluation to the API in one of the upcoming releases.