Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
RangeFromChild Method
Collapse the table of content
Expand the table of content

TextPattern.RangeFromChild Method

Retrieves a text range enclosing a child element such as an image, hyperlink, Microsoft Excel spreadsheet, or other embedded object. 

Namespace:  System.Windows.Automation
Assembly:  UIAutomationClient (in UIAutomationClient.dll)

public TextPatternRange RangeFromChild(
	AutomationElement childElement
)

Parameters

childElement
Type: System.Windows.Automation.AutomationElement

The enclosed object.

Return Value

Type: System.Windows.Automation.Text.TextPatternRange
A range that spans the child element.

ExceptionCondition
ArgumentNullException

The child element is null.

InvalidOperationException

The element is not a child of the text container.

If there is no text in the range where the child element exists, a degenerate (empty) range is returned.

The childElement parameter is either a child of the AutomationElement associated with a TextPattern or from the array of children of a TextPatternRange.

/// ------------------------------------------------------------------- 
/// <summary> 
/// Obtain the text control of interest from the target application. 
/// </summary> 
/// <param name="targetApp">
/// The target application. 
/// </param> 
/// <returns> 
/// An AutomationElement that represents a text provider.. 
/// </returns> 
/// ------------------------------------------------------------------- 
private AutomationElement GetTextElement(AutomationElement targetApp)
{
    // The control type we're looking for; in this case 'Document'
    PropertyCondition cond1 =
        new PropertyCondition(
        AutomationElement.ControlTypeProperty,
        ControlType.Document);

    // The control pattern of interest; in this case 'TextPattern'.
    PropertyCondition cond2 = 
        new PropertyCondition(
        AutomationElement.IsTextPatternAvailableProperty, 
        true);

    AndCondition textCondition = new AndCondition(cond1, cond2);

    AutomationElement targetTextElement =
        targetApp.FindFirst(TreeScope.Descendants, textCondition);

    // If targetText is null then a suitable text control was not found. 
    return targetTextElement;
}


...


/// ------------------------------------------------------------------- 
/// <summary> 
/// Obtains a text range spanning an embedded child  
/// of a document control and displays the content of the range. 
/// </summary> 
/// <param name="targetTextElement">
/// The AutomationElment that represents a text control. 
/// </param> 
/// ------------------------------------------------------------------- 
private void GetRangeFromChild(AutomationElement targetTextElement)
{
    TextPattern textPattern =
        targetTextElement.GetCurrentPattern(TextPattern.Pattern)
        as TextPattern;

    if (textPattern == null)
    {
        // Target control doesn't support TextPattern. 
        return;
    }

    // Obtain a text range spanning the entire document.
    TextPatternRange textRange = textPattern.DocumentRange;

    // Retrieve the embedded objects within the range.
    AutomationElement[] embeddedObjects = textRange.GetChildren();

    // Retrieve and display text value of embedded object. 
    foreach (AutomationElement embeddedObject in embeddedObjects)
    {
        if ((bool)embeddedObject.GetCurrentPropertyValue(
            AutomationElement.IsTextPatternAvailableProperty))
        {
           // For full functionality a secondary TextPattern should 
           // be obtained from the embedded object. 
           // embeddedObject must be a child of the text provider.
            TextPatternRange embeddedObjectRange =
                textPattern.RangeFromChild(embeddedObject);
            // GetText(-1) retrieves all text in the range. 
            // Typically a more limited amount of text would be  
            // retrieved for performance and security reasons.
            Console.WriteLine(embeddedObjectRange.GetText(-1));
        }
    }
}

.NET Framework

Supported in: 4.6, 4.5, 4, 3.5, 3.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1
Show:
© 2015 Microsoft