Compartir vía


Propiedades de UI Automation para clientes

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.

Esta introducción presenta las propiedades de la automatización de la interfaz de usuario tal como se exponen en las aplicaciones cliente de automatización de la interfaz de usuario.

Las propiedades de los objetos AutomationElement contienen información sobre elementos de la interfaz de usuario (UI), normalmente controles. Las propiedades de un elemento AutomationElement son genéricas; es decir, no son específicas de un tipo de control. Muchas de estas propiedades se exponen en la estructura AutomationElement.AutomationElementInformation .

Los patrones de control también tienen propiedades. Las propiedades de los patrones de control son específicas para el modelo. Por ejemplo, ScrollPattern tiene propiedades que permiten a una aplicación cliente detectar si una ventana es desplazable horizontal o verticalmente, y cuáles son los tamaños de la vista actual y las posiciones de desplazamiento. Los patrones de control exponen todas sus propiedades a través de una estructura; por ejemplo, ScrollPattern.ScrollPatternInformation.

Las propiedades de la automatización de la interfaz de usuario son de solo lectura. Para establecer las propiedades de un control, debe utilizar los métodos del patrón de control adecuado. Por ejemplo, utilice Scroll para cambiar los valores de posición de una ventana desplazable.

Para mejorar el rendimiento, los valores de propiedad de los controles y los patrones de control pueden almacenarse en caché cuando se recuperan objetos AutomationElement . Para obtener más información, consulte Almacenamiento en caché en los clientes de automatización de la interfaz de usuario.

Identificadores de propiedad

El identificador de propiedad (ID) está formado por valores constantes únicos que se encapsulan en objetos AutomationProperty. Las aplicaciones cliente de automatización de la interfaz de usuario obtienen estos elementos de ID de la clase AutomationElement o de la clase de patrón de control apropiada, como ScrollPattern. Los proveedores de Automatización de la interfaz de usuario los obtienen de AutomationElementIdentifiers o de una de las clases de identificadores de patrón de control, como ScrollPatternIdentifiers.

Los proveedores usan el valor numérico Id de un elemento AutomationProperty para identificar las propiedades que se consultan en el método IRawElementProviderSimple.GetPropertyValue . En general, las aplicaciones cliente no necesitan examinar Id. ProgrammaticName solo se usa para fines de depuración y diagnóstico.

Condiciones de propiedad

Los ID de propiedad se utilizan para construir objetos PropertyCondition que se usan para buscar objetos AutomationElement. Por ejemplo, podría querer buscar un elemento AutomationElement que tenga un nombre determinado o todos los controles que están habilitados. Cada PropertyCondition especifica un identificador AutomationProperty y el valor con el que debe coincidir la propiedad.

Para más información, consulte los temas de referencia siguientes:

Recuperación de propiedades

Algunas propiedades de AutomationElement y todas las propiedades de una clase de patrón de control se exponen como propiedades anidadas de las propiedades Current o Cached del objeto de patrón de control AutomationElement .

Además, cualquier propiedad de patrón de control o AutomationElement , incluida una propiedad que no esté disponible en la estructura Cached o Current , se puede recuperar con uno de los métodos siguientes:

Estos métodos ofrecen un rendimiento ligeramente superior así como acceso a la gama completa de propiedades.

En el ejemplo de código siguiente se muestran las dos maneras de recuperar una propiedad en un elemento AutomationElement.

// elementList is an AutomationElement.

// The following two calls are equivalent.
string name = elementList.Current.Name;
name = elementList.GetCurrentPropertyValue(AutomationElement.NameProperty) as string;
' elementList is an AutomationElement.
' The following two calls are equivalent.
Dim name As String = elementList.Current.Name
name = CStr(elementList.GetCurrentPropertyValue(AutomationElement.NameProperty))

Para recuperar propiedades de los patrones de control que admite el elemento AutomationElement, no es necesario recuperar el objeto de patrón de control. Basta con pasar uno de los identificadores de propiedad de patrón al método.

En el ejemplo de código siguiente se muestran las dos maneras de recuperar una propiedad en un patrón de control.

// elementList is an AutomationElement representing a list box.
// Error-checking is omitted. Assume that elementList is known to support SelectionPattern.

SelectionPattern selectPattern =
    elementList.GetCurrentPattern(SelectionPattern.Pattern) as SelectionPattern;
bool isMultipleSelect = selectPattern.Current.CanSelectMultiple;

// The following call is equivalent to the one above.
isMultipleSelect = (bool)
    elementList.GetCurrentPropertyValue(SelectionPattern.CanSelectMultipleProperty);
' elementList is an AutomationElement representing a list box.
' Error-checking is omitted. Assume that elementList is known to support SelectionPattern.
Dim selectPattern As SelectionPattern = _
    DirectCast(elementList.GetCurrentPattern(SelectionPattern.Pattern), SelectionPattern)
Dim isMultipleSelect As Boolean = selectPattern.Current.CanSelectMultiple

' The following call is equivalent to the one above.
isMultipleSelect = CBool(elementList.GetCurrentPropertyValue(SelectionPattern.CanSelectMultipleProperty))

Los métodos Get devuelven un elemento Object. La aplicación debe convertir el objeto devuelto al tipo apropiado antes de utilizar el valor.

Valores de propiedad predeterminados

Si un proveedor de Automatización de la interfaz de usuario no implementa una propiedad, el sistema de automatización de la interfaz de usuario es capaz de facilitar un valor predeterminado. Por ejemplo, si el proveedor de un control no admite la propiedad identificada por HelpTextProperty, la automatización de la interfaz de usuario devuelve una cadena vacía. De forma similar, si el proveedor no admite la propiedad identificada por IsDockPatternAvailableProperty, la automatización de la interfaz de usuario devuelve false.

Puede cambiar este comportamiento mediante las sobrecargas del método AutomationElement.GetCachedPropertyValue y AutomationElement.GetCurrentPropertyValue . Cuando se especifica true como el segundo parámetro, la automatización de la interfaz de usuario no devuelve un valor predeterminado, sino que en su lugar devuelve el valor especial NotSupported.

En el ejemplo de código siguiente se intenta recuperar una propiedad de un elemento y, si no se admite la propiedad, se utiliza un valor definido por la aplicación en su lugar.

// elementList is an AutomationElement.
object help = elementList.GetCurrentPropertyValue(AutomationElement.HelpTextProperty, true);
if (help == AutomationElement.NotSupported)
{
    help = "No help available";
}
string helpText = (string)help;
' elementList is an AutomationElement.
Dim help As Object = elementList.GetCurrentPropertyValue(AutomationElement.HelpTextProperty, True)
If help Is AutomationElement.NotSupported Then
    help = "No help available"
End If
Dim helpText As String = CStr(help)

Para detectar las propiedades que admite un elemento, utilice GetSupportedProperties. Esto devuelve una matriz de identificadores AutomationProperty .

Eventos de cambio de propiedades

Cuando el valor de una propiedad de un elemento AutomationElement o un patrón de control cambia, se produce un evento. Una aplicación puede suscribirse a dichos eventos mediante una llamada a AddAutomationPropertyChangedEventHandler, proporcionando una matriz de identificadores AutomationProperty como el último parámetro para especificar las propiedades de interés.

En el elemento AutomationPropertyChangedEventHandler, puede identificar la propiedad que ha cambiado si comprueba el miembro Property de los argumentos del evento. Los argumentos también contienen los valores antiguos y nuevos de la propiedad de la automatización de la interfaz de usuario que ha cambiado. Estos valores son del tipo Object y se deben convertir al tipo correcto antes de utilizarse.

Propiedades adicionales de AutomationElement

Además de las estructuras de propiedad Current y Cached , AutomationElement tiene las propiedades siguientes, que se recuperan mediante descriptores de acceso de propiedades simples.

Propiedad Descripción
CachedChildren Una colección de objetos de elementos secundarios AutomationElement que están en la caché.
CachedParent Un objeto primario AutomationElement que está en la caché.
FocusedElement (Propiedad estática) El elemento AutomationElement que tiene el foco de entrada.
RootElement (Propiedad estática) El elemento AutomationElementraíz.

Consulte también