Note

Access to this page requires authorization. You can try signing in or .

Access to this page requires authorization. You can try .

AutomationElement.CachedParent Property

Definition

Namespace:
System.Windows.Automation
Assembly:
UIAutomationClient.dll

Important

Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.

Gets the cached parent of this AutomationElement.

public:
 property System::Windows::Automation::AutomationElement ^ CachedParent { System::Windows::Automation::AutomationElement ^ get(); };
public System.Windows.Automation.AutomationElement CachedParent { get; }
member this.CachedParent : System.Windows.Automation.AutomationElement
Public ReadOnly Property CachedParent As AutomationElement

Property Value

The parent element. The return value can be null if the specified element has no parent - for example, if this element is the root node.

Exceptions

No parent element is cached.

The UI for the AutomationElement no longer exists.

Examples

In the following example, the Name properties of a list box and its list items are cached. The list box element is available in the CachedParent property of each list item element.

/// <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);
}
''' <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>
Sub CachePropertiesWithScope(ByVal elementMain As AutomationElement)
 Dim elementList As AutomationElement

 ' Set up the CacheRequest.
 Dim cacheRequest As New CacheRequest()
 cacheRequest.Add(AutomationElement.NameProperty)
 cacheRequest.TreeScope = TreeScope.Element Or 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.
 Dim myCondition As New PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.List)
 elementList = elementMain.FindFirst(TreeScope.Children, myCondition)

 If elementList Is Nothing Then
 Return
 End If

 ' The following illustrates that the children of the list are in the cache.
 Dim listItem As AutomationElement
 For Each listItem In elementList.CachedChildren
 Console.WriteLine(listItem.Cached.Name)
 Next listItem

 ' 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.
 Dim child As AutomationElement = elementList.CachedChildren(0)
 Console.WriteLine(child.CachedParent.Cached.Name)
 End Using
End Sub

Applies to

See also


Feedback

Was this page helpful?