Export (0) Print
Expand All
This topic has not yet been rated - Rate this topic

AutomationElement.CachedChildren Property

Gets the cached child elements of this AutomationElement.

Namespace:  System.Windows.Automation
Assembly:  UIAutomationClient (in UIAutomationClient.dll)
public AutomationElementCollection CachedChildren { get; }

Property Value

Type: System.Windows.Automation.AutomationElementCollection
The collection of child elements. This collection can be empty if the element has no children.
ExceptionCondition
ElementNotAvailableException

The UI for the AutomationElement no longer exists.

InvalidOperationException

No request was made to cache the children of this element.

The view of the returned collection is determined by the TreeFilter condition of the CacheRequest that was active when this AutomationElement object was obtained.

Children are cached only if the scope of the CacheRequest included Subtree, Children, or Descendants.

If the CacheRequest specified that children were to be cached at this level, but there are no children, then the value of this property is 0. However, if no request was made to cache children at this level, an attempt to retrieve the property raises an exception.

In the following example, a list box element is obtained from the parent window element while a CacheRequest is active and TreeScope is Children. The specified properties of the child elements (that is, the list items) are stored in the cache and can be retrieved from the CachedChildren of the list box.


/// <summary>
/// Gets a list box element and caches the Name property of its children (the list items).
/// </summary>
/// <param name="elementMain">The UI Automation element for the parent window.</param>
void CachePropertiesWithScope(AutomationElement elementMain)
{
    AutomationElement elementList;

    // Set up the CacheRequest.
    CacheRequest cacheRequest = new CacheRequest();
    cacheRequest.Add(AutomationElement.NameProperty);
    cacheRequest.TreeScope = TreeScope.Element | TreeScope.Children;

    // Activate the CacheRequest and get the element. Note that the scope of the CacheRequest
    // is in relation to the object being retrieved: the list box and its children are 
    // cached, not the main window and its children.
    using (cacheRequest.Activate())
    {
        // Load the list element and cache the specified properties for its descendants.
        Condition cond = new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.List);
        elementList = elementMain.FindFirst(TreeScope.Children, cond);
    }
    if (elementList == null) return;

    // The following illustrates that the children of the list are in the cache.
    foreach (AutomationElement listItem in elementList.CachedChildren)
    {
        Console.WriteLine(listItem.Cached.Name);
    }

    // The following call raises an exception, because the IsEnabled property was not cached.
    /*** Console.WriteLine(listItem.Cached.IsEnabled); ***/

    // The following illustrates that because the list box itself was cached, it is now
    // available as the CachedParent of each list item.
    AutomationElement child = elementList.CachedChildren[0];
    Console.WriteLine(child.CachedParent.Cached.Name);
}


.NET Framework

Supported in: 4, 3.5, 3.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Did you find this helpful?
(1500 characters remaining)
Thank you for your feedback

Community Additions

ADD
Show:
© 2014 Microsoft. All rights reserved.