Share via


Enable Navigation in a UI Automation Fragment Provider

This topic contains example code that shows how to enable navigation in a UI Automation provider for an element that is within a fragment.

Example

The following example code implements Navigate for a list item within a list. The parent element is the list box element, and the sibling elements are other items in the list collection. The method returns null (Nothing in Visual Basic) for directions that are not valid; in this case, FirstChild and LastChild, because the element has no children.

''' <summary> 
''' Navigate to adjacent elements in the automation tree. 
''' </summary> 
''' <param name="direction">Direction to navigate.</param> 
''' <returns>The element in that direction, or null.</returns> 
''' <remarks> 
''' parentControl is the provider for the list box. 
''' parentItems is the collection of list item providers. 
''' </remarks> 
Public Function Navigate(ByVal direction As NavigateDirection) As IRawElementProviderFragment _
    Implements IRawElementProviderFragment.Navigate

    Dim myIndex As Integer = parentItems.IndexOf(Me)
    If direction = NavigateDirection.Parent Then 
        Return DirectCast(parentControl, IRawElementProviderFragment)
    ElseIf direction = NavigateDirection.NextSibling Then 
        If myIndex < parentItems.Count - 1 Then 
            Return DirectCast(parentItems((myIndex + 1)), IRawElementProviderFragment)
        Else 
            Return Nothing 
        End If 
    ElseIf direction = NavigateDirection.PreviousSibling Then 
        If myIndex > 0 Then 
            Return DirectCast(parentItems((myIndex - 1)), IRawElementProviderFragment)
        Else 
            Return Nothing 
        End If 
    Else 
        Return Nothing 
    End If 

End Function 'Navigate
/// <summary> 
/// Navigate to adjacent elements in the automation tree. 
/// </summary> 
/// <param name="direction">Direction to navigate.</param>
/// <returns>The element in that direction, or null.</returns> 
/// <remarks> 
/// parentControl is the provider for the list box. 
/// parentItems is the collection of list item providers. 
/// </remarks> 
public IRawElementProviderFragment Navigate(NavigateDirection direction)
{
    int myIndex = parentItems.IndexOf(this);
    if (direction == NavigateDirection.Parent)
    {
        return (IRawElementProviderFragment)parentControl;
    }
    else if (direction == NavigateDirection.NextSibling)
    {
        if (myIndex < parentItems.Count - 1)
        {
            return (IRawElementProviderFragment)parentItems[myIndex + 1];
        }
        else
        {
            return null;
        }
    }
    else if (direction == NavigateDirection.PreviousSibling)
    {
        if (myIndex > 0)
        {
            return (IRawElementProviderFragment)parentItems[myIndex - 1];
        }
        else return null;
    }
    else return null;
}

See Also

Concepts

UI Automation Providers Overview

Server-Side UI Automation Provider Implementation