Patrones de control compatibles en un proveedor de UI Automation

Nota

Esta documentación está dirigida a los desarrolladores de .NET Framework que quieran usar las clases de automatización de la interfaz de usuario administradas definidas en el espacio de nombres System.Windows.Automation. Para ver la información más reciente acerca de la automatización de la interfaz de usuario, consulte Windows Automation API: automatización de la interfaz de usuario.

En este tema se muestra cómo implementar uno o varios patrones de control en un proveedor de Automatización de la interfaz de usuario para que las aplicaciones cliente puedan manipular controles y obtener datos de ellos.

Admitir patrones de control

  1. Implemente las interfaces adecuadas para los patrones de control que el elemento debe admitir, como IInvokeProvider para InvokePattern.

  2. Devuelva el objeto que contiene la implementación de cada interfaz de control de la implementación de IRawElementProviderSimple.GetPatternProvider

Ejemplo 1

En el ejemplo siguiente se muestra una implementación de ISelectionProvider para un cuadro de lista personalizada de selección única. Devuelve tres propiedades y obtiene el elemento actualmente seleccionado.

#region ISelectionProvider Members

/// <summary>
/// Specifies whether selection of more than one item at a time is supported.
/// </summary>
public bool CanSelectMultiple
{
    get
    {
        return false;
    }
}

/// <summary>
/// Specifies whether the list has to have an item selected at all times.
/// </summary>
public bool IsSelectionRequired
{
    get
    {
        return true;
    }
}

/// <summary>
/// Returns the automation provider for the selected list item.
/// </summary>
/// <returns>The selected item.</returns>
/// <remarks>
/// MyList is an ArrayList collection of providers for items in the list box.
/// SelectedIndex is the index of the selected item.
/// </remarks>
public IRawElementProviderSimple[] GetSelection()
{
    if (SelectedIndex >= 0)
    {
        IRawElementProviderSimple itemProvider = (IRawElementProviderSimple)MyList[SelectedIndex];
        IRawElementProviderSimple[] providers =  { itemProvider };
        return providers;
    }
    else
    {
        return null;
    }
}
#endregion ISelectionProvider Members
#Region "ISelectionProvider Members"

    ''' <summary>
    ''' Specifies whether selection of more than one item at a time is supported.
    ''' </summary>

    Public ReadOnly Property CanSelectMultiple() As Boolean _
        Implements ISelectionProvider.CanSelectMultiple
        Get
            Return False
        End Get
    End Property
    ''' <summary>
    ''' Specifies whether the list has to have an item selected at all times.
    ''' </summary>

    Public ReadOnly Property IsSelectionRequired() As Boolean _
        Implements ISelectionProvider.IsSelectionRequired
        Get
            Return True
        End Get
    End Property

    ''' <summary>
    ''' Returns the automation provider for the selected list item.
    ''' </summary>
    ''' <returns>The selected item.</returns>
    ''' <remarks>
    ''' MyList is an ArrayList collection of providers for items in the list box.
    ''' SelectedIndex is the index of the selected item.
    ''' </remarks>
    Public Function GetSelection() As IRawElementProviderSimple() _
        Implements ISelectionProvider.GetSelection
        If SelectedIndex >= 0 Then
            Dim itemProvider As IRawElementProviderSimple = DirectCast(MyList(SelectedIndex), IRawElementProviderSimple)
            Dim providers(1) As IRawElementProviderSimple
            providers(0) = itemProvider
            Return providers
        Else
            Return Nothing
        End If

    End Function 'GetSelection 
#End Region
    Private Members As ISelectionProvider

Ejemplo 2

En el ejemplo siguiente se muestra una implementación de GetPatternProvider que devuelve la clase que implementa ISelectionProvider. La mayoría de los controles de cuadro de lista admitirían otros patrones también, pero en este ejemplo se devuelve una referencia nula (Nothing en Visual Basic de Microsoft .NET) para todos los demás identificadores de patrón.

/// <summary>
/// Returns the object that supports the specified pattern.
/// </summary>
/// <param name="patternId">ID of the pattern.</param>
/// <returns>Object that implements IInvokeProvider.</returns>
/// <remarks>
/// In this case, the ISelectionProvider interface is implemented in another provider-defined class,
/// ListPattern. However, it could be implemented in the base provider class, in which case the
/// method would simply return "this".
/// </remarks>
object IRawElementProviderSimple.GetPatternProvider(int patternId)
{
    if (patternId == SelectionPatternIdentifiers.Pattern.Id)
    {
        return new ListPattern(myItems, SelectedIndex);
    }
    else
    {
        return null;
    }
}
''' <summary>
''' Returns the object that supports the specified pattern.
''' </summary>
''' <param name="patternId">ID of the pattern.</param>
''' <returns>Object that implements IInvokeProvider.</returns>
''' <remarks>
''' In this case, the ISelectionProvider interface is implemented in another provider-defined class,
''' ListPattern. However, it could be implemented in the base provider class, in which case the
''' method would simply return "this".
''' </remarks>
Function GetPatternProvider(ByVal patternId As Integer) As Object _
    Implements IRawElementProviderSimple.GetPatternProvider

    If patternId = SelectionPatternIdentifiers.Pattern.Id Then
        Return New ListPattern(myItems, SelectedIndex)
    Else
        Return Nothing
    End If

End Function 'IRawElementProviderSimple.GetPatternProvider

Consulte también