Está en la página 1de 448

Díganos qué opina sobre la experiencia de descarga del PDF.

Automatización de la interfaz de usuario


de Microsoft
Artículo • 21/02/2023

7 Nota

Esta documentación está dirigida a los desarrolladores de .NET 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.

La Automatización de la interfaz de usuario de Microsoft, un marco de accesibilidad


para Microsoft Windows. Se ocupa de los requisitos de los productos de tecnología de
asistencia y marcos de pruebas automatizadas al proporcionar acceso mediante
programación a información sobre la interfaz de usuario (IU). Además, la
Automatización de la interfaz de usuario permite que los desarrolladores de controles y
aplicaciones creen productos accesibles.

En esta documentación se describe la API de la Automatización de la interfaz de usuario


para código administrado. Para obtener información sobre cómo programar la
Automatización de la interfaz de usuario en C++, consulte Automatización de la interfaz
de usuario para aplicaciones Win32.

En esta sección
Procedimientos de accesibilidad recomendados
Fundamentos de UI Automation
Proveedores de UI Automation para código administrado
Clientes de UI Automation para código administrado
Patrones de control de UI Automation
Modelo de texto de UI Automation
Tipos de control de UI Automation

Secciones relacionadas
Ejemplos de accesibilidad
Procedimientos de accesibilidad
recomendados
Artículo • 10/05/2023

7 Nota

Este artículo está dirigido 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.

Al implementar los siguientes procedimientos recomendados en los controles o las


aplicaciones, mejorará su accesibilidad para las personas que utilizan dispositivos de
tecnología de asistencia. Muchos de estos procedimientos recomendados se centran en
lograr un buen diseño de la interfaz de usuario. Cada procedimiento recomendado
incluye información de implementación para los controles o aplicaciones de Windows
Presentation Foundation (WPF). En muchos casos, el trabajo que se debe realizar para
cumplir estos procedimientos recomendados ya está incluido en los controles de WPF.

Acceso mediante programación


Para usar el acceso mediante programación, hay que asegurarse de que todos los
elementos de la interfaz de usuario tengan etiqueta, de que los valores de las
propiedades estén expuestos y de que se generen los eventos adecuados. Con los
controles de WPF estándar, la mayor parte de este trabajo ya se realiza a través de
AutomationPeer. Los controles personalizados requieren trabajo adicional para
comprobar que el acceso mediante programación esté implementado correctamente.

Habilitar el acceso mediante programación a todos los


elementos de la interfaz de usuario y el texto
Los elementos de la interfaz de usuario (UI) deben habilitar el acceso mediante
programación. Si la interfaz de usuario es un control de WPF estándar, el acceso
mediante programación se incluirá en el control. Si el control es un control
personalizado, un control derivado de un control común o un control derivado de
Control, debe comprobar la implementación de AutomationPeer en las áreas que
puedan necesitar modificaciones.
Seguir este procedimiento recomendado permite a los proveedores de tecnología de
asistencia identificar y manipular los elementos de la interfaz de usuario del producto.

Colocar nombres, títulos y descripciones en objetos de


interfaz de usuario, marcos y páginas
Las tecnologías de asistencia, especialmente los lectores de pantalla, utilizan el título
para entender la ubicación del marco, el objeto o la página dentro del esquema de
navegación. Por lo tanto, el título debe ser descriptivo. Por ejemplo, si el título de una
página web es “página web de Microsoft”, será inútil si el usuario navegó hasta un área
muy concreta. Los títulos descriptivos son fundamentales para los usuarios ciegos que
dependen de los lectores de pantalla. Del mismo modo, para los controles de WPF,
NameProperty y HelpTextProperty son importantes para los dispositivos de tecnología
de asistencia.

Seguir este procedimiento recomendado permite a las tecnologías de asistencia


identificar y manipular la interfaz de usuario de las aplicaciones y los controles de
ejemplo.

Asegurarse de que todas las actividades de la interfaz de


usuario activan eventos mediante programación
Seguir este procedimiento recomendado permite a las tecnologías de asistencia recibir
los cambios de la interfaz de usuario y notificar al usuario sobre estos cambios.

Configuración del usuario


Con el procedimiento recomendado de esta sección, puede asegurarse de que los
controles o las aplicaciones no sobrescriban la configuración del usuario.

Respetar todas las configuraciones de todo el sistema y


no interferir con las funciones de accesibilidad
Los usuarios pueden usar el Panel de control para establecer algunos marcadores para
todo el sistema. Otras marcas se pueden establecer mediante programación. Esta
configuración no debe cambiarse con controles ni aplicaciones. Además, las aplicaciones
deben admitir la configuración de accesibilidad de su sistema operativo host.

Seguir este procedimiento recomendado permite a los usuarios establecer la


configuración de accesibilidad y saber que las aplicaciones no cambiarán esa
configuración.

Diseño visual de la interfaz de usuario


Los procedimientos recomendados de esta sección sirven para asegurarse de que los
controles o las aplicaciones utilicen colores e imágenes de forma eficaz y puedan
utilizarse en las tecnologías de asistencia.

No codificar los colores de forma rígida


Es posible que las personas que son daltónicas, tienen poca visión o usan una pantalla
en blanco y negro no puedan utilizar las aplicaciones con colores codificados de forma
rígida.

Seguir este procedimiento recomendado permite a los usuarios ajustar las


combinaciones de colores en función de sus necesidades individuales.

Compatibilidad con el contraste alto y todos los atributos


de visualización del sistema
Las aplicaciones no deben interrumpir ni deshabilitar la configuración de contraste
seleccionada por el usuario para todo el sistema, así como las selecciones de color u
otros atributos y configuraciones de visualización para todo el sistema. La configuración
del sistema adoptada por un usuario mejora la accesibilidad de las aplicaciones, por lo
que las aplicaciones no deben deshabilitarla ni ignorarla. El color se debe utilizar en su
combinación correcta de primer plano y fondo para proporcionar el contraste
apropiado. No mezcle colores no relacionados y no revierta los colores.

Muchos usuarios necesitan combinaciones concretas de contraste alto, como texto


blanco sobre un fondo negro. Si se dibujan invertidas, por ejemplo, como texto negro
sobre un fondo blanco, esto hará que el fondo se superponga al primer plano y puede
dificultar la lectura de algunos usuarios.

Asegurarse de que toda la interfaz de usuario se escale


correctamente con cualquier configuración de PPP
Asegúrese de que toda la interfaz de usuario puede escalarse correctamente a cualquier
valor de puntos por pulgada (ppp). Asegúrese, también, de que los elementos de la
interfaz de usuario quepan en una pantalla de 1024 x 768 con 120 puntos por pulgada
(ppp).
Navegación
Los procedimientos recomendados en esta sección abarcan la navegación de los
controles y las aplicaciones.

Proporcionar la interfaz de teclado a todos los elementos


de la interfaz de usuario
Las tabulaciones, especialmente cuando se planean cuidadosamente, proporcionan a los
usuarios otra manera de navegar por la interfaz de usuario.

Las aplicaciones deben proporcionar las interfaces de teclado siguientes:

tabulaciones para todos los controles con los que pueda interactuar el usuario,
como botones, vínculos o cuadros de lista
orden de tabulación lógico

Mostrar el foco del teclado


Los usuarios necesitan saber qué objeto tiene el foco del teclado para poder prever el
efecto de las pulsaciones de teclas. Para resaltar el foco del teclado, utilice colores,
fuentes o gráficos como rectángulos o ampliaciones. Para resaltar de forma audible el
foco del teclado, cambie el volumen, el tono o la calidad del tono.

Para evitar confusiones, las aplicaciones deben ocultar todos los indicadores de foco
visuales y atenuar las selecciones que se encuentran en las ventanas, o los paneles,
inactivos.

Las aplicaciones deben hacer lo siguiente con el foco del teclado:

un elemento deberá tener siempre el foco del teclado


el foco del teclado debe ser visible y obvio
las selecciones y/o los elementos donde se encuentra el foco deben aparecer
resaltados visualmente

Compatibilidad con los estándares de navegación y


esquemas de navegación eficaces
Los diferentes aspectos de la navegación con el teclado proporcionan diversas maneras
de navegar por la interfaz de usuario.

Las aplicaciones deben proporcionar las interfaces de teclado siguientes:


teclas de método abreviado y teclas de acceso subrayadas para todos los
comandos, menús y controles
métodos abreviados de teclado para los vínculos importantes
todos los elementos de menú deben tener una tecla de acceso, todos los botones
deben tener teclas de aceleración y todos los comandos deben tener una tecla de
aceleración.

No dejar que la ubicación del mouse interfiera con la


navegación mediante el teclado
La ubicación del mouse no debe interferir con la navegación mediante el teclado. Por
ejemplo, si el mouse está situado en un lugar y el usuario navega con el teclado, no
debería producirse un clic del mouse si no lo inicia el usuario.

Interfaz multimodal
Los procedimientos recomendados de esta sección sirven para que la interfaz de usuario
de la aplicación incluya alternativas a los elementos visuales.

Proporcionar equivalentes seleccionables por el usuario


para los elementos no textuales
Para cada elemento no textual, proporcione un equivalente seleccionable por el usuario
para el texto, transcripciones o descripciones de audio, como texto alternativo, títulos o
comentarios visuales.

Los elementos no textuales abarcan una gran variedad de elementos de la interfaz de


usuario, por ejemplo: imágenes, regiones de mapa de imagen, animaciones, applets,
marcos, scripts, botones gráficos, sonidos, archivos de audio independientes y vídeos.
Los elementos no textuales son importantes cuando contienen información visual, voz o
información de audio general a la que el usuario necesita acceder para entender el
contenido de la interfaz de usuario.

Usar color, pero proporcionar también alternativas al


color
Use el color para mejorar, enfatizar o reiterar la información que se muestra por otros
medios, pero no comunique la información con el color exclusivamente. Los usuarios
daltónicos o con pantallas monocromáticas necesitan alternativas al color.
Usar la API de entrada estándar con llamadas
independientes del dispositivo
Las llamadas independientes del dispositivo garantizan la igualdad de las características
de teclado y mouse, y proporcionan a la tecnología de asistencia la información
necesaria sobre la interfaz de usuario.

Consulte también
System.Windows.Automation.Peers
NumericUpDown Custom Control with Theme and UI Automation Support Sample
(Ejemplo de un control personalizado NumericUpDown y compatibilidad para
Automatización de la interfaz de usuario)
Directrices para el diseño de la interfaz de usuario de teclado
Fundamentos de UI Automation
Artículo • 10/05/2023

7 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 sección contiene información general de alto nivel de la API de Automatización de


la interfaz de usuario de Microsoft.

En esta sección
Introducción a Automatización de la interfaz de usuarioAutomatización de la interfaz de
usuario y Microsoft Active AccessibilityIntroducción al árbol de Automatización de la
interfaz de usuarioIntroducción a los patrones de control de Automatización de la
interfaz de usuarioIntroducción a las propiedades de Automatización de la interfaz de
usuarioIntroducción a los eventos de Automatización de la interfaz de
usuarioIntroducción a la seguridad de Automatización de la interfaz de usuarioUso de
Automatización de la interfaz de usuario para pruebas automatizadas

Referencia
System.Windows.Automation

System.Windows.Automation.Provider

System.Windows.Automation.Text

UIAutomationClientsideProviders
Información general sobre UI
Automation
Artículo • 10/05/2023

7 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.

Automatización de la interfaz de usuario de Microsoft es el marco nuevo de


accesibilidad para Microsoft Windows, disponible en todos los sistemas operativos que
admiten Windows Presentation Foundation (WPF).

La Automatización de la interfaz de usuario ofrece acceso mediante programación a la


mayoría de los elementos de la interfaz de usuario (UI) del escritorio y permite
productos de tecnología de asistencia como lectores de pantalla para ofrecer
información sobre la interfaz de usuario a los usuarios finales y manipular la UI mediante
otros medios distintos de la entrada estándar. La Automatización de la interfaz de
usuario también permite que scripts de pruebas automatizadas interactúen con la UI.

7 Nota

La Automatización de la interfaz de usuario no permite la comunicación entre


procesos iniciados por usuarios diferentes mediante el comando Ejecutar como.

Las aplicaciones cliente de la automatización de la interfaz de usuario se pueden escribir


con la certeza de que funcionarán en varios marcos de trabajo. El núcleo de la
Automatización de la interfaz de usuario enmascara las diferencias entre los marcos que
subyacen a distintas partes de la UI. Por ejemplo, la propiedad Content de un botón
WPF, la propiedad Caption de un botón Win32 y la propiedad ALT de una imagen
HTML se asignan a una propiedad única, Name, en la vista Automatización de la interfaz
de usuario.

La Automatización de la interfaz de usuario proporciona una funcionalidad completa en


los sistemas operativos Windows compatibles que ejecutan .NET Framework (consulte
los requisitos del sistema de .NET Framework o versiones de .NET Core a partir de
.NET Core 3.0.

Los proveedores de la Automatización de la interfaz de usuario ofrecen algo de


compatibilidad con las aplicaciones cliente de Microsoft Active Accessibility a través de
un servicio de puente integrado.

Proveedores y clientes
La Automatización de la interfaz de usuario tiene cuatro componentes principales, como
se muestra en la tabla siguiente.

Componente Descripción

API del proveedor Conjunto de definiciones de interfaz que se implementan


(UIAutomationProvider.dll and por proveedores de la Automatización de la interfaz de
UIAutomationTypes.dll) usuario, que ofrecen información sobre los elementos de la
UI y que responden a la entrada mediante programación.

API de cliente Conjunto de tipos de código administrado que permite a


(UIAutomationClient.dll y las aplicaciones cliente de la Automatización de la interfaz
UIAutomationTypes.dll) de usuario obtener información sobre la UI y enviar la
entrada a controles.

UiAutomationCore.dll El código subyacente (a veces denominado el núcleo de la


Automatización de la interfaz de usuario ) que controla la
comunicación entre los proveedores y los clientes.

UIAutomationClientsideProviders.dll Un conjunto de proveedores de automatización de la


interfaz de usuario para controles heredados estándar. (Los
controles WPF tienen compatibilidad nativa con la
Automatización de la interfaz de usuario). Esta
compatibilidad está disponible automáticamente para las
aplicaciones cliente.

Desde la perspectiva del desarrollador de software, hay dos formas de usar la


Automatización de la interfaz de usuario: crear compatibilidad con controles
personalizados (mediante la API del proveedor) y crear aplicaciones que usan el núcleo
de la Automatización de la interfaz de usuario para comunicarse con elementos de la UI
(mediante la API del cliente). En función de su enfoque, debe hacer referencia a
diferentes partes de la documentación. Puede obtener más información sobre los
conceptos y adquirir conocimientos prácticos en las secciones siguientes.

Sección Materia Público


Sección Materia Público

Fundamentos de la Amplias introducciones a los conceptos. Todos.


Automatización de la
interfaz de usuario (esta
sección)

Proveedores de UI Información general y temas de procedimientos Desarrolladores


Automation para código que le ayudarán a usar la API del proveedor. de controles.
administrado

Clientes de UI Información general y temas de procedimientos Desarrolladores


Automation para código que le ayudarán a usar la API del cliente. de aplicaciones
administrado de cliente.

Patrones de control de UI Información sobre cómo sedeben implementar los Todos.


Automation patrones de control por los proveedores y qué
funcionalidad está disponible para los clientes.

Modelo de texto de UI Información sobre cómo sedeben implementar el Todos.


Automation patrón de control Text por los proveedores y qué
funcionalidad está disponible para los clientes.

Tipos de control de UI Información sobre las propiedades y los patrones Todos.


Automation de control admitidos por diferentes tipos de
control.

En la tabla siguiente, se muestran espacios de nombres de la Automatización de la


interfaz de usuario, archivos DLL que los contienen y el público que los usa.

Espacio de nombres DLL a las que se hace referencia Público

System.Windows.Automation UIAutomationClientUIAutomationTypes Desarrolladores de


cliente de la
Automatización de
la interfaz de
usuario; se utiliza
para buscar objetos
AutomationElement,
registrarse para
eventos de la
Automatización de
la interfaz de
usuario y trabajar
con patrones de
control de la
Automatización de
la interfaz de
usuario.
Espacio de nombres DLL a las que se hace referencia Público

System.Windows.Automation.Provider UIAutomationProviderUIAutomationTypes Desarrolladores de


los proveedores de
la Automatización
de la interfaz de
usuario para marcos
distintos de WPF.

System.Windows.Automation.Text UIAutomationClientUIAutomationTypes Desarrolladores de


proveedores de la
Automatización de
la interfaz de
usuario para marcos
distintos de WPF; se
usan para
implementar el
patrón de control
TextPattern.

System.Windows.Automation.Peers PresentationFramework Desarrolladores de


los proveedores de
la Automatización
de la interfaz de
usuario para WPF.

Modelo de la automatización de la interfaz de


usuario
La Automatización de la interfaz de usuario expone cada parte de la UI a las aplicaciones
cliente como un AutomationElement. Los elementos se encuentran en una estructura de
árbol, con el escritorio como el elemento raíz. Los clientes pueden filtrar la vista sin
formato del árbol como una vista de control o una vista de contenido. Las aplicaciones
también pueden crear vistas personalizadas.

Los objetos AutomationElement exponen propiedades comunes de los elementos de la


UI que representan. Una de estas propiedades es el tipo de control, que define su
funcionalidad y aspecto básico como una única entidad reconocible: por ejemplo, un
botón o una casilla.

Además, los elementos exponen los patrones de control que ofrecen propiedades
específicas para sus tipos de control. Los patrones de control también exponen métodos
que permiten a los clientes obtener más información sobre el elemento y ofrecer
entrada.
7 Nota

No hay una correspondencia de uno a uno entre los tipos de control y los patrones
de control. Un patrón de control puede ser compatible con varios tipos de control y
un control puede admitir varios patrones de control, cada uno de los cuales expone
diferentes aspectos de su comportamiento. Por ejemplo, un cuadro combinado
tiene al menos dos patrones de control: uno que representa su capacidad para
expandir y contraer, y otro que representa el mecanismo de selección. Para obtener
información específica, vea UI Automation Control Types.

La Automatización de la interfaz de usuario también ofrece información para las


aplicaciones cliente a través de eventos. A diferencia de WinEvents, los eventos de la
Automatización de la interfaz de usuario no se basan en un mecanismo de difusión. Los
clientes de la Automatización de la interfaz de usuario se registran para recibir
notificaciones de evento específicas y pueden solicitar que se pase información de
patrón de control y propiedades de la Automatización de la interfaz de usuario
específicas a sus controladores de eventos. Además, un evento de la Automatización de
la interfaz de usuario contiene una referencia al elemento que lo generó. Los
proveedores pueden mejorar el rendimiento generando eventos de forma selectiva,
dependiendo de si los clientes están escuchando.

Consulte también
Información general sobre el árbol de la UI Automation
Información general acerca de los patrones de control de UI Automation
Información general acerca de las propiedades de UI Automation
Información general sobre eventos de UI Automation
Información general sobre la seguridad de UI Automation
UI Automation y Microsoft Active
Accessibility
Artículo • 09/05/2023

7 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.

Microsoft Active Accessibility era la solución anterior para hacer que las aplicaciones
fuesen accesibles. La Automatización de la interfaz de usuario de Microsoft es el modelo
nuevo de accesibilidad para Microsoft Windows y está pensado para abordar las
necesidades de los productos de tecnología de asistencia y las herramientas de prueba
automatizadas. La Automatización de la interfaz de usuario ofrece muchas mejoras
respecto de Active Accessibility.

En este tema, se incluyen las características principales de la Automatización de la


interfaz de usuario y se explica cómo estas características se diferencian de Active
Accessibility.

Lenguajes de programación
Active Accessibility se basa en el modelo de objetos componentes (COM) con
compatibilidad con interfaces dobles y, por tanto, se puede programar en C/C++,
Microsoft Visual Basic 6.0 y lenguajes de scripting. La Automatización de la interfaz de
usuario (incluida la biblioteca del proveedor del lado cliente para los controles estándar)
se escribe en código administrado y las aplicaciones cliente de la Automatización de la
interfaz de usuario se programan con mayor facilidad mediante C# o Visual Basic .NET.
Los proveedores de automatización de la interfaz de usuario, que son implementaciones
de interfaz, se pueden escribir en código administrado o en C/C++.

Compatibilidad en Windows Presentation


Foundation
Windows Presentation Foundation (WPF) es el modelo nuevo para crear interfaces de
usuario. Los elementos de WPF no contienen compatibilidad nativa con Active
Accessibility; sin embargo, sí admiten la Automatización de la interfaz de usuario, lo que
incluye compatibilidad de puente con los clientes de Active Accessibility. Solo los
clientes creados de manera específica para la Automatización de la interfaz de usuario
pueden aprovechar al máximo las características de accesibilidad de WPF, como la
amplia compatibilidad con texto.

Servidores y clientes
En Active Accessibility, los servidores y clientes se comunican directamente, en gran
medida a través de la implementación del servidor de IAccessible .

En la Automatización de la interfaz de usuario, un servicio principal se encuentra entre el


servidor (denominado proveedor) y el cliente. El servicio principal realiza llamadas a las
interfaces implementadas por los proveedores y ofrece servicios adicionales como la
generación de identificadores únicos en tiempo de ejecución para los elementos. Las
aplicaciones cliente usan funciones de la biblioteca para llamar al servicio de la
Automatización de la interfaz de usuario.

Los proveedores de la Automatización de la interfaz de usuario pueden ofrecer


información a los clientes de Active Accessibility y los servidores de Active Accessibility
pueden ofrecer información a las aplicaciones cliente de la Automatización de la interfaz
de usuario. Sin embargo, dado que Active Accessibility no expone tanta información
como la Automatización de la interfaz de usuario, los dos modelos no son totalmente
compatibles.

Elementos de interfaz de usuario


Active Accessibility presenta los elementos de la UI como una interfaz IAccessible o
como un identificador secundario. Es difícil comparar dos punteros IAccessible para
determinar si hacen referencia al mismo elemento.

En la Automatización de la interfaz de usuario, cada elemento se representa como un


objeto AutomationElement. La comparación se realiza mediante el operador de
igualdad o el método Equals , que comparan los identificadores únicos en tiempo de
ejecución de los elementos.

Vistas de árbol y navegación


Los elementos de la interfaz de usuario (UI) de la pantalla pueden verse como una
estructura de árbol con el escritorio como la raíz, las ventanas de la aplicación como
elementos secundarios inmediatos y los elementos que se encuentran dentro de las
aplicaciones como descendientes más lejanos.

En Active Accessibility, muchos elementos de automatización que son irrelevantes para


los usuarios finales se exponen en el árbol. Las aplicaciones cliente tienen que mirar
todos los elementos para determinar cuáles son significativos.

Las aplicaciones cliente de la Automatización de la interfaz de usuario ven la UI


mediante una vista filtrada. La vista solo contiene elementos de interés: aquellos que
ofrecen información al usuario o habilitan la interacción. Hay vistas predefinidas que
incluyen solo elementos de control y solo elementos de contenido; además, las
aplicaciones pueden definir vistas personalizadas. La Automatización de la interfaz de
usuario simplifica la tarea de describir la UI al usuario y de ayudar al usuario para que
interactúe con la aplicación.

En Active Accessibility, la navegación entre elementos es espacial (por ejemplo,


desplazarse al elemento que se encuentra a la izquierda de la pantalla), lógica (por
ejemplo, moverse al elemento de menú siguiente o al elemento siguiente en el orden
de tabulación dentro de un cuadro de diálogo) o jerárquica (por ejemplo, mover el
primer elemento secundario de un contenedor o desde el elemento secundario a su
elemento principal). La navegación jerárquica resulta complicada por el hecho de que
los elementos secundarios no siempre son objetos que implementan IAccessible .

En la Automatización de la interfaz de usuario, todos los elementos de la UI son objetos


AutomationElement que admiten la misma funcionalidad básica. (Desde el punto de
vista del proveedor, se trata de objetos que implementan una interfaz heredada de
IRawElementProviderSimple). La navegación es principalmente jerárquica: de los
elementos primarios a los secundarios y de un elemento relacionado al siguiente. (La
navegación entre los elementos relacionados tiene un elemento lógico, ya que puede
seguir el orden de tabulación). Puede usar la clase TreeWalker para navegar desde
cualquier punto de partida, mediante cualquier vista filtrada del árbol. También puede
navegar a determinados elementos secundarios o descendientes mediante el uso de
FindFirst y FindAll; por ejemplo, es muy sencillo recuperar todos los elementos de un
cuadro de diálogo que admitan un patrón de control especificado.

La navegación en la Automatización de la interfaz de usuario es más coherente que en


Active Accessibility. Algunos elementos como las listas desplegables y las ventanas
emergentes aparecen dos veces en el árbol de Active Accessibility y la navegación desde
ellos puede tener resultados inesperados. Es realmente imposible implementar Active
Accessibility correctamente para un control rebar. La Automatización de la interfaz de
usuario habilita la reorganización dinámica de relación jerárquica y el cambio de
posición, para que un elemento se pueda colocar en cualquier lugar del árbol a pesar de
la jerarquía impuesta por la propiedad de las ventanas.

Roles y tipos de control


Active Accessibility usa la propiedad accRole ( IAccessible::get_actRole ) para recuperar
una descripción del rol del elemento en la UI, como ROLE_SYSTEM_SLIDER o
ROLE_SYSTEM_MENUITEM. El rol de un elemento es la pista principal para su
funcionalidad disponible. La interacción con un control se logra mediante métodos fijos
como IAccessible::accSelect y IAccessible::accDoDefaultAction . La interacción entre
la aplicación cliente y la UI se limita a lo que se puede hacer mediante IAccessible .

En cambio, la Automatización de la interfaz de usuario desacopla en gran medida el tipo


de control del elemento (descrito por la propiedad ControlType) de su funcionalidad
esperada. La funcionalidad se determina por los patrones de control admitidos por el
proveedor a través de su implementación de interfaces especializadas. Los patrones de
control se pueden combinar para describir el conjunto completo de la funcionalidad que
un determinado elemento de la UI admite. Algunos proveedores deben admitir un
patrón de control concreto; por ejemplo, el proveedor de una casilla debe admitir el
patrón de control Toggle. Otros proveedores deben admitir uno o más patrones de un
conjunto de patrones de control; por ejemplo, un botón debe admitir Toggle o Invoke.
Sin embargo, otros no admiten ningún patrón de control; por ejemplo, un panel que no
se pueda mover, cambiar de tamaño o acoplar no tiene ningún patrón de control.

La Automatización de la interfaz de usuario admite controles personalizados, que se


identifican mediante la propiedad Custom y se pueden describir con la propiedad
LocalizedControlTypeProperty.

En la tabla siguiente, se muestra la asignación de los roles de Active Accessibility a los


tipos de control de la Automatización de la interfaz de usuario.

Rol de Active Accessibility Tipo de control de la Automatización de la interfaz de


usuario

ROLE_SYSTEM_PUSHBUTTON Botón

ROLE_SYSTEM_CLIENT Calendario

ROLE_SYSTEM_CHECKBUTTON Casilla de verificación

ROLE_SYSTEM_COMBOBOX Cuadro combinado

ROLE_SYSTEM_CLIENT Personalizado
Rol de Active Accessibility Tipo de control de la Automatización de la interfaz de
usuario

ROLE_SYSTEM_LIST Cuadrícula de datos

ROLE_SYSTEM_LISTITEM Elemento de datos

ROLE_SYSTEM_DOCUMENT Documento

ROLE_SYSTEM_TEXT Editar

ROLE_SYSTEM_GROUPING Group (Grupo)

ROLE_SYSTEM_LIST Encabezado

ROLE_SYSTEM_COLUMNHEADER Elemento de encabezado

ROLE_SYSTEM_LINK Hyperlink

ROLE_SYSTEM_GRAPHIC Imagen

ROLE_SYSTEM_LIST List

ROLE_SYSTEM_LISTITEM Elemento de lista

ROLE_SYSTEM_MENUPOPUP Menú

ROLE_SYSTEM_MENUBAR Barra de menús

ROLE_SYSTEM_MENUITEM Elemento de menú

ROLE_SYSTEM_PANE Panel

ROLE_SYSTEM_PROGRESSBAR Barra de progreso

ROLE_SYSTEM_RADIOBUTTON Botón de selección

ROLE_SYSTEM_SCROLLBAR Barra de desplazamiento

ROLE_SYSTEM_SEPARATOR Separador

ROLE_SYSTEM_SLIDER Control deslizante

ROLE_SYSTEM_SPINBUTTON Spinner

ROLE_SYSTEM_SPLITBUTTON Botón de expansión

ROLE_SYSTEM_STATUSBAR Barra de estado

ROLE_SYSTEM_PAGETABLIST Pestaña

ROLE_SYSTEM_PAGETAB Elemento de pestaña

ROLE_SYSTEM_TABLE Tabla
Rol de Active Accessibility Tipo de control de la Automatización de la interfaz de
usuario

ROLE_SYSTEM_STATICTEXT Texto

ROLE_SYSTEM_INDICATOR Thumb

ROLE_SYSTEM_TITLEBAR Barra de título

ROLE_SYSTEM_TOOLBAR Barra de herramientas

ROLE_SYSTEM_TOOLTIP Información sobre herramientas

ROLE_SYSTEM_OUTLINE Árbol

ROLE_SYSTEM_OUTLINEITEM Elemento de árbol

ROLE_SYSTEM_WINDOW Periodo

Para más información sobre los diferentes tipos de control, vea UI Automation Control
Types.

Estados y propiedades
En Active Accessibility, los elementos admiten un conjunto común de propiedades y
algunas propiedades (como accState ) deben describir aspectos muy diferentes, en
función del rol del elemento. Los servidores deben implementar todos los métodos de
IAccessible que devuelvan una propiedad, incluso aquellos que no son pertinentes
para el elemento.

La Automatización de la interfaz de usuario define muchas más propiedades, algunas de


las cuales se corresponden con estados en Active Accessibility. Algunas son comunes
para todos los elementos, pero otras son específicas de tipos de control y patrones de
control. Las propiedades se distinguen mediante identificadores únicos y la mayoría de
las propiedades se pueden recuperar mediante el uso de un único método,
GetCurrentPropertyValue o GetCachedPropertyValue. Muchas propiedades también se
pueden recuperar con facilidad a partir de los descriptores de acceso de propiedad
Current y Cached .

Un proveedor de la automatización de la interfaz de usuario no tiene que implementar


propiedades irrelevantes, pero puede devolver simplemente un valor null para
cualquier propiedad que no admita. Además, el servicio principal de la Automatización
de la interfaz de usuario puede obtener algunas propiedades del proveedor de ventana
predeterminado y estas se combinan con propiedades implementadas de manera
explícita por el proveedor.
Además de admitir muchas más propiedades, la Automatización de la interfaz de
usuario ofrece un rendimiento mejorado al permitir que se recuperen varias
propiedades con una llamada única entre procesos.

En la tabla siguiente se muestra la correspondencia entre las propiedades de los dos


modelos.

Descriptor de acceso de Id. de propiedad de la Comentarios


propiedades de Active Automatización de la interfaz
Accessibility de usuario

get_accKeyboardShortcut AccessKeyProperty o AccessKeyProperty tiene prioridad


AcceleratorKeyProperty si ambos están presentes.

get_accName NameProperty

get_accRole ControlTypeProperty Vea la tabla anterior para la


asignación de roles a tipos de
control.

get_accValue ValuePattern.ValueProperty Válido únicamente para tipos de


control que admiten ValuePattern
RangeValuePattern.ValueProperty o RangeValuePattern. Los valores
de RangeValue se normalizan
entre 0 y 100, para que sean
coherentes con el
comportamiento de MSAA. Los
elementos de valor usan una
cadena.

get_accHelp HelpTextProperty

accLocation BoundingRectangleProperty

get_accDescription No se admite en la accDescription no tenía una


Automatización de la interfaz de especificación clara en MSAA, lo
usuario que hizo que los proveedores
colocaran diferente información
en esta propiedad.

get_accHelpTopic No se admite en la
Automatización de la interfaz de
usuario

En la tabla siguiente, se muestra qué propiedades de la Automatización de la interfaz de


usuario corresponde a las restricciones de estado de Active Accessibility.
Estado de Active Accessibility Propiedad de la Automatización de la ¿Desencadena el
interfaz de usuario cambio de
estado?

STATE_SYSTEM_CHECKED Para casilla, ToggleStateProperty Y

Para botón de radio, IsSelectedProperty

STATE_SYSTEM_COLLAPSED ExpandCollapseState = Collapsed Y

STATE_SYSTEM_EXPANDED ExpandCollapseState = Expanded o Y


PartiallyExpanded

STATE_SYSTEM_FOCUSABLE IsKeyboardFocusableProperty N

STATE_SYSTEM_FOCUSED HasKeyboardFocusProperty N

STATE_SYSTEM_HASPOPUP ExpandCollapsePattern para elementos N


de menú

STATE_SYSTEM_INVISIBLE IsOffscreenProperty = True y N


GetClickablePoint produce
NoClickablePointException

STATE_SYSTEM_LINKED ControlTypeProperty = N

Hyperlink

STATE_SYSTEM_MIXED ToggleState = Indeterminate N

STATE_SYSTEM_MOVEABLE CanMoveProperty N

STATE_SYSTEM_MUTLISELECTABLE CanSelectMultipleProperty N

STATE_SYSTEM_OFFSCREEN IsOffscreenProperty = True N

STATE_SYSTEM_PROTECTED IsPasswordProperty N

STATE_SYSTEM_READONLY RangeValuePattern.IsReadOnlyProperty N
y ValuePattern.IsReadOnlyProperty

STATE_SYSTEM_SELECTABLE SelectionItemPattern se admite N

STATE_SYSTEM_SELECTED IsSelectedProperty N

STATE_SYSTEM_SIZEABLE CanResize N

STATE_SYSTEM_UNAVAILABLE IsEnabledProperty Y

Los estados siguientes no se implementaron por la mayoría de los servidores de control


de Active Accessibility o no tienen un equivalente en la Automatización de la interfaz de
usuario.
Estado de Active Accessibility Comentarios

STATE_SYSTEM_BUSY No disponible en la Automatización de la interfaz de usuario

STATE_SYSTEM_DEFAULT No disponible en la Automatización de la interfaz de usuario

STATE_SYSTEM_ANIMATED No disponible en la Automatización de la interfaz de usuario

STATE_SYSTEM_EXTSELECTABLE No implementado ampliamente por servidores de Active


Accessibility

STATE_SYSTEM_MARQUEED No implementado ampliamente por servidores de Active


Accessibility

STATE_SYSTEM_SELFVOICING No implementado ampliamente por servidores de Active


Accessibility

STATE_SYSTEM_TRAVERSED No disponible en la Automatización de la interfaz de usuario

STATE_SYSTEM_ALERT_HIGH No implementado ampliamente por servidores de Active


Accessibility

STATE_SYSTEM_ALERT_MEDIUM No implementado ampliamente por servidores de Active


Accessibility

STATE_SYSTEM_ALERT_LOW No implementado ampliamente por servidores de Active


Accessibility

STATE_SYSTEM_FLOATING No implementado ampliamente por servidores de Active


Accessibility

STATE_SYSTEM_HOTTRACKED No disponible en la Automatización de la interfaz de usuario

STATE_SYSTEM_PRESSED No disponible en la Automatización de la interfaz de usuario

Para una lista completa de los identificadores de propiedad de la Automatización de la


interfaz de usuario, consulte Información general sobre las propiedades de la
Automatización de la interfaz de usuario.

Events
El mecanismo de eventos de la Automatización de la interfaz de usuario, a diferencia de
lo que ocurre con Active Accessibility, no se basa en el enrutamiento de eventos de
Windows (que está estrechamente relacionado con los identificadores de ventana) y no
requiere la aplicación cliente para configurar enlaces. Las suscripciones a eventos se
pueden ajustar no solo para eventos concretos, sino también para partes específicas del
árbol. Los proveedores también pueden ajustar su generación de eventos mediante el
mantenimiento del seguimiento de qué eventos se están escuchando.
También resulta más sencillo para los clientes recuperar los elementos que generan
eventos, ya que estos se pasan directamente a la devolución de llamada de evento. Las
propiedades del elemento se recuperan previamente de manera automática si había una
solicitud de caché activa cuando el cliente se suscribió al evento.

En la tabla siguiente, se muestra la correspondencia de WinEvents de Active Accessibility


y los eventos de la Automatización de la interfaz de usuario.

WinEvent Identificadores de eventos de la Automatización de


la interfaz de usuario

EVENT_OBJECT_ACCELERATORCHANGE Cambio de propiedadAcceleratorKeyProperty

EVENT_OBJECT_CONTENTSCROLLED Cambio de propiedad o en las barras de


desplazamiento asociadas

EVENT_OBJECT_CREATE StructureChangedEvent

EVENT_OBJECT_DEFACTIONCHANGE No equivalente

EVENT_OBJECT_DESCRIPTIONCHANGE Ningún equivalente exacto; quizás cambio de


propiedad HelpTextProperty o
LocalizedControlTypeProperty

EVENT_OBJECT_DESTROY StructureChangedEvent

EVENT_OBJECT_FOCUS AutomationFocusChangedEvent

EVENT_OBJECT_HELPCHANGE Cambio deHelpTextProperty

EVENT_OBJECT_HIDE StructureChangedEvent

EVENT_OBJECT_LOCATIONCHANGE Cambio de propiedadBoundingRectangleProperty

EVENT_OBJECT_NAMECHANGE Cambio de propiedadNameProperty

EVENT_OBJECT_PARENTCHANGE StructureChangedEvent

EVENT_OBJECT_REORDER No se usa de manera uniforme en Active Accessibility.


No se define directamente ningún evento
correspondiente en la Automatización de la interfaz de
usuario.

EVENT_OBJECT_SELECTION ElementSelectedEvent

EVENT_OBJECT_SELECTIONADD ElementAddedToSelectionEvent

EVENT_OBJECT_SELECTIONREMOVE ElementRemovedFromSelectionEvent

EVENT_OBJECT_SELECTIONWITHIN No equivalente
WinEvent Identificadores de eventos de la Automatización de
la interfaz de usuario

EVENT_OBJECT_SHOW StructureChangedEvent

EVENT_OBJECT_STATECHANGE Diversos eventos de cambio de propiedades

EVENT_OBJECT_VALUECHANGE Se han cambiadoRangeValuePattern.ValueProperty y


ValuePattern.ValueProperty

EVENT_SYSTEM_ALERT No equivalente

EVENT_SYSTEM_CAPTUREEND No equivalente

EVENT_SYSTEM_CAPTURESTART No equivalente

EVENT_SYSTEM_CONTEXTHELPEND No equivalente

EVENT_SYSTEM_CONTEXTHELPSTART No equivalente

EVENT_SYSTEM_DIALOGEND WindowClosedEvent

EVENT_SYSTEM_DIALOGSTART WindowOpenedEvent

EVENT_SYSTEM_DRAGDROPEND No equivalente

EVENT_SYSTEM_DRAGDROPSTART No equivalente

EVENT_SYSTEM_FOREGROUND AutomationFocusChangedEvent

EVENT_SYSTEM_MENUEND MenuClosedEvent

EVENT_SYSTEM_MENUPOPUPEND MenuClosedEvent

EVENT_SYSTEM_MENUPOPUPSTART MenuOpenedEvent

EVENT_SYSTEM_MENUSTART MenuOpenedEvent

EVENT_SYSTEM_MINIMIZEEND Cambio de propiedadWindowVisualStateProperty

EVENT_SYSTEM_MINIMIZESTART Cambio de propiedadWindowVisualStateProperty

EVENT_SYSTEM_MOVESIZEEND Cambio de propiedadBoundingRectangleProperty

EVENT_SYSTEM_MOVESIZESTART Cambio de propiedadBoundingRectangleProperty

EVENT_SYSTEM_SCROLLINGEND Cambio de propiedad o

EVENT_SYSTEM_SCROLLINGSTART Cambio de propiedad o

EVENT_SYSTEM_SOUND No equivalente
WinEvent Identificadores de eventos de la Automatización de
la interfaz de usuario

EVENT_SYSTEM_SWITCHEND Ningún equivalente, pero un evento


AutomationFocusChangedEvent señala que una nueva
aplicación ha recibido el enfoque

EVENT_SYSTEM_SWITCHSTART No equivalente

No equivalente Cambio de propiedadCurrentViewProperty

No equivalente Cambio de propiedadHorizontallyScrollableProperty

No equivalente Cambio de propiedadVerticallyScrollableProperty

No equivalente Cambio de propiedadHorizontalScrollPercentProperty

No equivalente Cambio de propiedadVerticalScrollPercentProperty

No equivalente Cambio de propiedadHorizontalViewSizeProperty

No equivalente Cambio de propiedadVerticalViewSizeProperty

No equivalente Cambio de propiedadToggleStateProperty

No equivalente Cambio de propiedadWindowVisualStateProperty

No equivalente EventoAsyncContentLoadedEvent

No equivalente ToolTipOpenedEvent

Seguridad
Algunos escenarios de personalización de IAccessible requieren el ajuste de
IAccessible de base y la llamada a través de él. Esto tiene implicaciones de seguridad,
puesto que un componente de confianza parcial no debería ser un intermediario en una
ruta de acceso a código.

El modelo de la Automatización de la interfaz de usuario quita la necesidad de que los


proveedores realicen llamadas a otro código de proveedor. El servicio principal de la
Automatización de la interfaz de usuario realiza toda la agregación necesaria.

Consulte también
Fundamentos de UI Automation
Información general sobre el árbol de la
UI Automation
Artículo • 10/05/2023

7 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.

Los productos de tecnología de asistencia y los scripts de prueba navegan por el árbol
de UI Automation para reunir información sobre UI Automation y sus elementos.

Dentro del árbol de UI Automation existe un elemento raíz (RootElement) que


representa el escritorio actual y cuyos elementos secundarios representan ventanas de
la aplicación. Cada uno de estos elementos secundarios puede contener elementos que
representan partes de UI, como menús, botones, barras de herramientas y cuadros de
lista. A su vez, estos elementos pueden contener elementos, como elementos de lista.

El árbol de UI Automation no es una estructura fija y casi nunca se presenta en su


totalidad, ya que podría contener miles de elementos. Partes de él se crean conforme se
necesitan y pueden experimentar cambios a medida que se agregan, mueven o quitan
elementos.

Los proveedores de Automatización de la interfaz de usuario admiten el árbol de UI


Automation mediante la implementación de navegación entre los elementos dentro de
un fragmento, que consta de una raíz (normalmente hospedada en una ventana) y un
subárbol. Sin embargo, a los proveedores no les afecta la navegación de un control a
otro. Esto lo administra el núcleo de UI Automation, utilizando la información de los
proveedores de ventana predeterminados.

Vistas del árbol de automatización


Es posible filtrar el árbol de UI Automation para crear vistas que solo contengan
aquellos objetos AutomationElement que sean relevantes para un cliente determinado.
Este enfoque permite a los clientes personalizar la estructura presentada a través de UI
Automation para sus necesidades concretas.
El cliente tiene dos maneras de personalizar la vista: mediante ámbito y mediante
filtrado. El ámbito consiste en definir el alcance de la vista, a partir de un elemento base:
por ejemplo, la aplicación podría querer buscar únicamente los elementos secundarios
directos del escritorio o todos los descendientes de una ventana de aplicación. El
filtrado implica definir los tipos de elementos que deben incluirse en la vista.

Los proveedores de UI Automation admiten el filtrado mediante la definición de


propiedades en los elementos, incluidas las propiedades IsControlElementProperty y
IsContentElementProperty.

UI Automation proporciona tres vistas predeterminadas. Estas vistas se definen


mediante el tipo de filtrado realizado; el ámbito de cualquier vista lo define la
aplicación. Además, la aplicación puede aplicar otros filtros en las propiedades; por
ejemplo, para incluir únicamente controles habilitados en una vista de control.

Vista sin formato


La vista sin formato del árbol de UI Automation es el árbol completo de objetos
AutomationElement del que el escritorio es la raíz. La vista sin formato sigue
estrechamente la estructura de programación nativa de una aplicación y es, por tanto, la
vista más detallada disponible. También es la base sobre la que se crean las otras vistas
del árbol. Como esta vista depende del marco de UI subyacente, la vista sin formato de
un botón WPF tendrá una vista sin formato diferente de la de un botón Win32.

La vista sin formato se obtiene mediante la búsqueda de elementos sin especificar


propiedades o usando el elemento RawViewWalker para navegar por el árbol.

Vista de control
La vista de control del árbol de UI Automation simplifica la tarea del producto de
tecnología de asistencia de la descripción de UI al usuario final y le ayuda a interactuar
con la aplicación, ya que se asigna estrechamente a la estructura UI que percibe un
usuario final.

La vista de control es un subconjunto de la vista sin formato. Incluye todos los


elementos UI de la vista sin formato que un usuario final entendería como interactivos o
que contribuyen a la estructura lógica del control en la UI. Algunos ejemplos de
elementos UI que contribuyen a la estructura lógica de la UI, pero no son interactivos
por sí mismos, son los contenedores de elementos como los encabezados de vistas de
lista, las barras de herramientas, los menús y la barra de estado. En la vista de control no
se verán los elementos no interactivos que se utilizan simplemente para fines
decorativos o de diseño. Un ejemplo es un panel utilizado únicamente para organizar
los controles en un cuadro de diálogo, pero no contiene ninguna información en sí. Los
elementos no interactivos que se verán en la vista de control son gráficos con
información y texto estático en un cuadro de diálogo. Los elementos no interactivos que
se incluyen en la vista de control no pueden recibir el foco del teclado.

La vista de control se obtiene mediante la búsqueda de elementos que tengan la


propiedad IsControlElement establecida en true o mediante el elemento
ControlViewWalker para navegar por el árbol.

Vista de contenido
La vista de contenido del árbol de UI Automation es un subconjunto de la vista de
control. Contiene elementos de UI que transmiten la información verdadera en una
interfaz de usuario, entre la que se incluyen los elementos de UI que pueden recibir el
foco del teclado y texto que no es una etiqueta en un elemento UI. Por ejemplo, los
valores de un cuadro combinado desplegable aparecerán en la vista de contenido
porque representan la información que usa un usuario final. En la vista de contenido, un
cuadro combinado y un cuadro de lista se representan como una colección de
elementos de UI, donde se pueden seleccionar uno o, quizás, varios elementos. El hecho
de que uno siempre esté abierto y otro pueda expandirse y contraerse es irrelevante en
la vista de contenido, ya que está diseñada para mostrar los datos, o el contenido, que
se muestran al usuario.

La vista de contenido se obtiene mediante la búsqueda de elementos que tengan la


propiedad IsContentElement establecida en true o mediante el elemento
ContentViewWalker para navegar por el árbol.

Vea también
AutomationElement
Información general sobre UI Automation
Información general acerca de los
patrones de control de UI Automation
Artículo • 10/05/2023

7 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.

Este tema es una introducción a los patrones de control para Microsoft de


automatización de la interfaz de usuario. Los patrones de control proporcionan una
manera de categorizar y exponer la funcionalidad de un control independientemente de
su tipo o apariencia.

La automatización de la interfaz de usuario utiliza patrones de control para representar


comportamientos de control comunes. Por ejemplo, utilice el patrón de control Invoke
para los controles que se puedan invocar (como los botones) y el patrón de control
Scroll para los controles que tengan barras de desplazamiento (como los cuadros de
lista, las vistas de lista o los cuadros combinados). Como cada patrón de control
representa una funcionalidad independiente, se pueden combinar para describir el
conjunto completo de funcionalidad que admite un control determinado.

7 Nota

Los controles agregados, creados con controles secundarios que proporcionan a la


interfaz de usuario (UI) la funcionalidad que expone el objeto primario, deben
implementar todos los patrones de control normalmente asociados con cada
control secundario. En cambio, no es necesario que los controles secundarios
implementen esos mismos patrones de control.

Componentes de los patrones de control de


Automatización de la interfaz de usuario
Los patrones de control admiten los métodos, propiedades, eventos y relaciones
necesarios para definir una parte de funcionalidad discreta disponible en un control.

La relación entre un elemento de Automatización de la interfaz de usuario y su


elemento primario, sus elementos secundarios y los del mismo nivel describe la
estructura del elemento dentro del árbol de la automatización de la interfaz de
usuario.

Los métodos permiten que los clientes de Automatización de la interfaz de usuario


manipulen el control.

Las propiedades y los eventos ofrecen información sobre la funcionalidad del


patrón de control, así como información sobre el estado del control.

Los patrones de control se relacionan con la interfaz de usuario del mismo modo en que
las interfaces se relacionan con los objetos de Modelo de objetos componentes (COM).
En COM, puedes consultar a un objeto para preguntar qué interfaces admite y después
usar esas interfaces para acceder a la funcionalidad. En la automatización de la interfaz
de usuario, los clientes de automatización de la interfaz de usuario pueden preguntar a
un control qué patrones de control admite y, después, interactuar con el control
mediante los métodos, propiedades, eventos y estructuras que exponen los patrones de
control admitidos. Por ejemplo, para un cuadro de edición multilínea, los proveedores
de Automatización de la interfaz de usuario implementan IScrollProvider. Si un cliente
sabe que un elemento AutomationElement admite el patrón de control ScrollPattern ,
puede utilizar las propiedades, los métodos y los eventos expuestos por este patrón de
control para manipular el control o acceder a información sobre el control.

Clientes y proveedores de Automatización de la


interfaz de usuario
Los proveedores de Automatización de la interfaz de usuario implementan patrones de
control para exponer el comportamiento adecuado de una parte concreta de la
funcionalidad que admite el control.

Los clientes de Automatización de la interfaz de usuario acceden a métodos y


propiedades de clases de patrones de control de la automatización de la interfaz de
usuario y los usan para obtener información sobre la UI o para manipularla. Estas clases
de patrones de control se encuentran en el espacio de nombres
System.Windows.Automation (por ejemplo, InvokePattern y SelectionPattern).

Los clientes utilizan métodos AutomationElement (como


AutomationElement.GetCurrentPropertyValue o
AutomationElement.GetCachedPropertyValue) o los descriptores de acceso de Common
Language Runtime (CLR) para obtener acceso a las propiedades de la automatización de
la interfaz de usuario de un patrón. Cada clase de patrón de control tiene un miembro
de campo (por ejemplo, InvokePattern.Pattern o SelectionPattern.Pattern) que identifica
ese patrón de control y se puede pasar como un parámetro a GetCachedPattern o
GetCurrentPattern para recuperar ese patrón para un elemento AutomationElement.

Patrones de control dinámicos


Algunos controles no siempre admiten el mismo conjunto de patrones de control. Se
considera que los patrones de control se admiten cuando están disponibles para un
cliente de Automatización de la interfaz de usuario. Por ejemplo, un cuadro de edición
multilínea solo permite el desplazamiento vertical cuando contiene más líneas de texto
de las se pueden mostrar en su área visible. El desplazamiento se deshabilita cuando se
elimina el texto suficiente para que ya no sea necesario desplazarse. En este ejemplo, el
patrón de control ScrollPattern se admite dinámicamente según el estado actual del
control (la cantidad de texto que hay en el cuadro de edición).

Interfaces y clases de patrón de control


En la siguiente tabla se describen los patrones de control de la automatización de la
interfaz de usuario. En la tabla también se enumeran las clases que usan los clientes de
Automatización de la interfaz de usuario para acceder a los patrones de control, así
como las interfaces que utilizan los proveedores de Automatización de la interfaz de
usuario para implementarlos.

Clase de patrón de Interfaz del proveedor Descripción


control

DockPattern IDockProvider Se utiliza con los controles que se pueden


acoplar en un contenedor de acoplamiento.
Por ejemplo, las barras de herramientas o las
paletas de herramientas.

ExpandCollapsePattern IExpandCollapseProvider Se utiliza con los controles que pueden


expandir o contraer. Por ejemplo, los
elementos de menú de una aplicación como
el menú Archivo .
Clase de patrón de Interfaz del proveedor Descripción
control

GridPattern IGridProvider Se utiliza con los controles que admiten la


funcionalidad de cuadrícula, como el ajuste
de tamaño y el movimiento a una celda
concreta. Por ejemplo, la vista de iconos
grandes del Explorador de Windows o las
tablas simples sin encabezados de Microsoft
Word.

GridItemPattern IGridItemProvider Se utiliza con los controles que tienen celdas


dentro de cuadrículas. Las celdas
individuales deben admitir el patrón
GridItem. Por ejemplo, cada celda en la vista
de detalle del Explorador de Microsoft
Windows.

InvokePattern IInvokeProvider Se utiliza con los controles que se pueden


invocar, como un botón.

MultipleViewPattern IMultipleViewProvider Se utiliza con los controles que pueden


cambiar entre varias representaciones del
mismo conjunto de información, datos o
elementos secundarios. Por ejemplo, un
control de vista de lista donde los datos
están disponibles en vistas en miniaturas,
mosaico, iconos, lista o de detalle.

RangeValuePattern IRangeValueProvider Se utiliza con los controles que tienen un


intervalo de valores que se pueden aplicar al
control. Por ejemplo, un control de número
que contiene años podría tener un intervalo
de 1900 a 2010, mientras que otro control de
número que muestra meses tendría un
intervalo de 1 a 12.

ScrollPattern IScrollProvider Se utiliza con los controles que pueden


realizar desplazamiento. Por ejemplo, un
control que tiene barras de desplazamiento
que están activas cuando hay más
información que se puede mostrar en el área
visible del control.

ScrollItemPattern IScrollItemProvider Se utiliza con los controles que tienen


elementos individuales en una lista que
permite desplazamiento. Por ejemplo, un
control de lista que tiene elementos
individuales en la lista de desplazamiento,
como un control de cuadro combinado.
Clase de patrón de Interfaz del proveedor Descripción
control

SelectionPattern ISelectionProvider Se utiliza con los controles de contenedor de


selección. Por ejemplo, los cuadros de lista y
los cuadros combinados.

SelectionItemPattern ISelectionItemProvider Se utiliza con los elementos individuales de


controles de contenedor de selección, como
cuadros de lista y cuadros combinados.

TablePattern ITableProvider Se utiliza con los controles que tienen una


cuadrícula e información de encabezado. Por
ejemplo, hojas de cálculo de Microsoft Excel.

TableItemPattern ITableItemProvider Se utiliza con los elementos de una tabla.

TextPattern ITextProvider Se utiliza con los controles de edición y


documentos que exponen información
textual.

TogglePattern IToggleProvider Se utiliza con los controles donde se puede


alternar el estado. Por ejemplo, casillas y
elementos de menú que pueden activarse.

TransformPattern ITransformProvider Se utiliza con los controles que se pueden


cambiar de tamaño, mover y girar. Los usos
típicos del patrón de control Transform se
encuentran en diseñadores, formularios,
editores gráficos y aplicaciones de dibujo.

ValuePattern IValueProvider Permite que los clientes obtengan o


establezcan un valor en los controles que no
admiten un intervalo de valores. Por ejemplo,
un selector de fecha y hora.

WindowPattern IWindowProvider Expone información específica en ventanas,


un concepto fundamental para el sistema
operativo Microsoft Windows. Algunos
ejemplos de controles que son ventanas son
ventanas de aplicación de nivel superior
(Microsoft Word, Microsoft Windows
Explorer, etc.), ventanas secundarias de la
interfaz de varios documentos (MDI) y
diálogos.

Consulte también
Patrones de controles de UI Automation para clientes
Asignación de patrones de controles para clientes de UI Automation
Información general sobre UI Automation
Propiedades de UI Automation para clientes
Eventos de UI Automation para clientes
Información general acerca de las
propiedades de UI Automation
Artículo • 10/05/2023

7 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.

Los proveedores de Automatización de la interfaz de usuario exponen las propiedades


de los elementos de Automatización de la interfaz de usuario de Microsoft. Estas
propiedades permiten que las aplicaciones de cliente de Automatización de la interfaz
de usuario detecten información sobre partes de la interfaz de usuario, especialmente
los controles, e incluidos los datos estáticos y dinámicos.

En esta sección se ofrece una amplia introducción a las propiedades de Automatización


de la interfaz de usuario de Microsoft. En los temas siguientes se proporciona
información más específica:

Propiedades de UI Automation para clientes

Implementación del proveedor de UI Automation en el servidor

Identificadores de propiedad
Cada propiedad se identifica mediante un número y un nombre. Los nombres de las
propiedades se utilizan únicamente para la depuración y el diagnóstico. Los
proveedores usan los identificadores numéricos para identificar las solicitudes de
propiedad entrantes. Las aplicaciones cliente, sin embargo, solo utilizan
AutomationProperty, que encapsula el número y el nombre, para identificar las
propiedades que quieren recuperar.

Los objetosAutomationProperty que representan propiedades determinadas están


disponibles como campos en diversas clases. Por motivos de seguridad, los proveedores
de Automatización de la interfaz de usuario obtienen estos objetos de un conjunto
independiente de clases que están incluidas en Uiautomationtypes.dll.
En la tabla siguiente se clasifican las propiedades por las clases que contienen los
identificadores AutomationProperty.

Tipos de propiedades Los clientes obtienen Los proveedores obtienen los


los identificadores de identificadores de

Propiedades comunes a todos los AutomationElement AutomationElementIdentifiers


elementos (consulte las tablas
siguientes)

Posición de una ventana de DockPattern DockPatternIdentifiers


acoplamiento

Estado de un elemento que se ExpandCollapsePattern ExpandCollapsePatternIdentifiers


puede expandir y contraer

Propiedades de un elemento en una GridItemPattern GridItemPatternIdentifiers


cuadrícula

Propiedades de una cuadrícula GridPattern GridPatternIdentifiers

Vista actual y admitida de un MultipleViewPattern MultipleViewPatternIdentifiers


elemento que tiene varias vistas

Propiedades de un elemento que se RangeValuePattern RangeValuePatternIdentifiers


desplaza en un intervalo de valores,
como un control deslizante

Propiedades de una ventana ScrollPattern ScrollPatternIdentifiers


desplazable

Estado y contenedor de un elemento SelectionItemPattern SelectionItemPatternIdentifiers


que se puede seleccionar, como en
una lista

Propiedades de un control que SelectionPattern SelectionPatternIdentifiers


contiene elementos de selección

Encabezados de fila y columna de un TableItemPattern TableItemPatternIdentifiers


elemento en una tabla

Encabezados de fila y columna, y TablePattern TablePatternIdentifiers


orientación, de una tabla

Estado de un control de alternancia TogglePattern TogglePatternIdentifiers

Capacidades de un elemento que se TransformPattern TransformPatternIdentifiers


pueden mover, girar o cambiar de
tamaño
Tipos de propiedades Los clientes obtienen Los proveedores obtienen los
los identificadores de identificadores de

Capacidades de lectura y escritura y ValuePattern ValuePatternIdentifiers


valor de un elemento que tiene un
valor

Capacidades y estado de una WindowPattern WindowPatternIdentifiers


ventana

Propiedades por categoría


En las siguientes tablas se clasifican las propiedades cuyos identificadores se encuentran
en AutomationElement y AutomationElementIdentifiers. Estas propiedades son comunes
para todos los controles. Salvo algunas de ellas, todas suelen ser estáticas a lo largo de
la duración de la aplicación de proveedor; la mayoría de propiedades dinámicas están
asociadas con patrones de control.

En la columna Property Access se enumeran los otros descriptores de acceso de cada


propiedad, además de GetCurrentPropertyValue y GetCachedPropertyValue. Para más
información sobre la obtención de propiedades en una aplicación cliente, consulte UI
Automation Properties for Clients.

7 Nota

Para obtener información específica sobre cada propiedad, siga el vínculo de la


columna Property Access .

Características de presentación

Identificador de la propiedad Property Access

BoundingRectangleProperty BoundingRectangle

CultureProperty N/D

HelpTextProperty HelpText

IsOffscreenProperty IsOffscreen

OrientationProperty Orientation

Tipo de elemento
Identificador de la propiedad Property Access

ControlTypeProperty ControlType

IsContentElementProperty IsContentElement

IsControlElementProperty IsControlElement

ItemTypeProperty ItemType

LocalizedControlTypeProperty LocalizedControlType

Identificación

Identificador de la propiedad Property Access

AutomationIdProperty AutomationId

ClassNameProperty ClassName

FrameworkIdProperty FrameworkId

LabeledByProperty LabeledBy

NameProperty Name

ProcessIdProperty ProcessId

RuntimeIdProperty GetRuntimeId

NativeWindowHandleProperty NativeWindowHandle

Interacción

Identificador de la propiedad Property Access

AcceleratorKeyProperty AcceleratorKey

AccessKeyProperty AccessKey

ClickablePointProperty GetClickablePoint

HasKeyboardFocusProperty HasKeyboardFocus

IsEnabledProperty IsEnabled

IsKeyboardFocusableProperty IsKeyboardFocusable
Compatibilidad con patrones

Identificador de la propiedad Property Access

IsDockPatternAvailableProperty GetSupportedPatterns

IsExpandCollapsePatternAvailableProperty GetSupportedPatterns

IsGridItemPatternAvailableProperty GetSupportedPatterns

IsGridPatternAvailableProperty GetSupportedPatterns

IsInvokePatternAvailableProperty GetSupportedPatterns

IsMultipleViewPatternAvailableProperty GetSupportedPatterns

IsRangeValuePatternAvailableProperty GetSupportedPatterns

IsScrollItemPatternAvailableProperty GetSupportedPatterns

IsScrollPatternAvailableProperty GetSupportedPatterns

IsSelectionItemPatternAvailableProperty GetSupportedPatterns

IsSelectionPatternAvailableProperty GetSupportedPatterns

IsTableItemPatternAvailableProperty GetSupportedPatterns

IsTablePatternAvailableProperty GetSupportedPatterns

IsTextPatternAvailableProperty GetSupportedPatterns

IsTogglePatternAvailableProperty GetSupportedPatterns

IsTransformPatternAvailableProperty GetSupportedPatterns

IsValuePatternAvailableProperty GetSupportedPatterns

IsWindowPatternAvailableProperty GetSupportedPatterns

Varios

Identificador de la propiedad Property Access

IsRequiredForFormProperty IsRequiredForForm

IsPasswordProperty IsPassword

ItemStatusProperty ItemStatus
Localización
Los proveedores de Automatización de la interfaz de usuario deben presentar las
siguientes propiedades en el idioma del sistema operativo:

AcceleratorKeyProperty

AccessKeyProperty

HelpTextProperty

LocalizedControlTypeProperty

NameProperty

Propiedades y eventos
El concepto de eventos de cambio de propiedad está estrechamente relacionado con las
propiedades de Automatización de la interfaz de usuario. Para las propiedades
dinámicas, la aplicación cliente necesita una manera de saber que un valor de propiedad
ha cambiado, por lo que puede actualizar su caché de información o reaccionar a la
nueva información de alguna otra manera.

Los proveedores generan eventos cuando cambia algo en la interfaz de usuario. Por
ejemplo, si se selecciona o se desactiva una casilla, la implementación del proveedor del
patrón Toggle genera un evento de cambio de propiedad. Los proveedores pueden
generar eventos de forma selectiva, dependiendo de si hay clientes en escucha de
eventos o en escucha de eventos específicos.

No todos los cambios de propiedades generan eventos; esto depende totalmente de la


implementación del proveedor de Automatización de la interfaz de usuario del
elemento. Por ejemplo, los proveedores de proxy estándares para cuadros de lista no
generan un evento cuando el elemento SelectionProperty cambia. En este caso, la
aplicación debe estar en su lugar a la escucha de un elemento ElementSelectedEvent.

Los clientes se ponen a la escucha de eventos suscribiéndose a ellos. La suscripción a


eventos supone la creación de métodos delegados que pueden controlar los eventos y,
después, pasan los métodos a Automatización de la interfaz de usuario junto con los
eventos específicos que se tratarán en esos métodos. Para los eventos de cambio de
propiedad en concreto, los clientes deben implementar
AutomationPropertyChangedEventHandler.
Consulte también
Almacenar en caché en los clientes de automatización de la interfaz de usuario
Propiedades de UI Automation para clientes
Implementación del proveedor de UI Automation en el servidor
Búsqueda de un elemento de Automatización de la interfaz de usuario basada en
una condición de propiedad
Devolución de propiedades por parte de un proveedor de UI Automation
Provocar eventos desde un proveedor de UI Automation
Información general sobre eventos de UI Automation
Artículo • 10/05/2023

7 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.

La notificación de eventos de automatización de la interfaz de usuario de Microsoft es una característica clave para las tecnologías de
asistencia, entre las que se incluyen lectores de pantalla y lupas. Estos clientes de automatización de la interfaz de usuario, realizan un
seguimiento de los eventos que los proveedores de automatización de la interfaz de usuario generan cuando sucede algo en la UI, y usan
esa información para notificar a los usuarios finales.

La eficacias se mejora gracias a que las aplicaciones proveedoras son capaces de generar los eventos de manera selectiva (en función de si
hay clientes suscritos a esos eventos) o de no generarlos en absoluto (si no hay clientes a la escucha de eventos).

Tipos de eventos
Los eventos de Automatización de la interfaz de usuario pueden clasificarse de la siguiente manera.

Evento Descripción

Cambio Se genera cuando se produce un cambio en un patrón de control o elemento de la automatización de la interfaz de usuario. Por ejemplo, si un
de cliente necesita supervisar un control de casilla de una aplicación, se puede registrar para escuchar si se produce un evento de cambio de
propiedad propiedad en la propiedad ToggleState . Cuando el control de casilla se activa o desactiva, el proveedor genera el evento y el cliente puede
actuar según sea necesario.

Acción de Se genera cuando se produce un cambio en la interfaz de usuario como resultado de la actividad del usuario final o de programación, por
elemento ejemplo, cuando se hace clic en un botón o se invoca mediante InvokePattern.

Cambio Se genera cuando cambia la estructura del árbol de automatización de la interfaz de usuario. La estructura cambia cuando se hacen visibles,
de ocultan o quitan elementos nuevos de la interfaz de usuario en el escritorio.
estructura

Cambio Se genera cuando se producen acciones de interés global para el cliente, por ejemplo, cuando el foco cambia de un elemento a otro o cuando
de se cierra una ventana.
escritorio
global

Algunos eventos no implican necesariamente un cambio en el estado de la UI. Por ejemplo, si el usuario se desplaza presionando la tecla
TAB hasta un campo de entrada de texto y después hace clic en un botón para actualizar el campo, se genera un evento TextChangedEvent
aunque, en realidad, el usuario no modifique el texto. Al procesar un evento, puede ser necesario que la aplicación cliente compruebe si
realmente se ha producido un cambio antes de realizar cualquier acción.

Los siguientes eventos se pueden generar incluso si no cambia el estado de la UI.

AutomationPropertyChangedEvent (en función de la propiedad que cambie)

ElementSelectedEvent

InvalidatedEvent

TextChangedEvent

Identificadores de eventos de automatización de la interfaz de usuario


Los eventos de automatización de la interfaz de usuario de Microsoft están definidos por los objetos AutomationEvent. La propiedad Id
contiene un valor que identifica de forma única el tipo de evento.

En la tabla siguiente se indican los valores posibles de Id , junto con el tipo que se usa para los argumentos del evento. Observe que los
identificadores usados por clientes y proveedores son campos de idéntico nombre y clases diferentes.

Identificador de cliente Identificador de proveedor Tipo de argumentos de evento


Identificador de cliente Identificador de proveedor Tipo de argumentos de evento

AutomationElement.AsyncContentLoadedEvent AutomationElementIdentifiers.AsyncContentLoadedEvent AsyncContentLoadedEventArgs

SelectionItemPattern.ElementAddedToSelectionEvent SelectionItemPatternIdentifiers.ElementAddedToSelectionEvent AutomationEventArgs

SelectionItemPattern.ElementRemovedFromSelectionEvent SelectionItemPatternIdentifiers.ElementRemovedFromSelectionEvent

SelectionItemPattern.ElementSelectedEvent SelectionItemPatternIdentifiers.ElementSelectedEvent

SelectionPattern.InvalidatedEvent SelectionPatternIdentifiers.InvalidatedEvent

InvokePattern.InvokedEvent InvokePatternIdentifiers.InvokedEvent

AutomationElement.LayoutInvalidatedEvent AutomationElementIdentifiers.LayoutInvalidatedEvent

AutomationElement.MenuClosedEvent AutomationElementIdentifiers.MenuClosedEvent

AutomationElement.MenuOpenedEvent AutomationElementIdentifiers.MenuOpenedEvent

TextPattern.TextChangedEvent TextPatternIdentifiers.TextChangedEvent

TextPattern.TextSelectionChangedEvent TextPatternIdentifiers.TextSelectionChangedEvent

AutomationElement.ToolTipClosedEvent AutomationElementIdentifiers.ToolTipClosedEvent

AutomationElement.ToolTipOpenedEvent AutomationElementIdentifiers.ToolTipOpenedEvent

WindowPattern.WindowOpenedEvent WindowPatternIdentifiers.WindowOpenedEvent

AutomationElement.AutomationFocusChangedEvent AutomationElementIdentifiers.AutomationFocusChangedEvent AutomationFocusChangedEventA

AutomationElement.AutomationPropertyChangedEvent AutomationElementIdentifiers.AutomationPropertyChangedEvent AutomationPropertyChangedEven

AutomationElement.StructureChangedEvent AutomationElementIdentifiers.StructureChangedEvent StructureChangedEventArgs

WindowPattern.WindowClosedEvent WindowPatternIdentifiers.WindowClosedEvent WindowClosedEventArgs

Argumentos de eventos de automatización de la interfaz de usuario


Las clases siguientes encapsulan los argumentos de eventos.

Clase Descripción

AsyncContentLoadedEventArgs Contiene información sobre la carga asincrónica de contenido, como el porcentaje de carga completada.

AutomationEventArgs Contiene información sobre un evento simple que no requiere datos adicionales.

AutomationFocusChangedEventArgs Contiene información sobre el foco de entrada, que pasa de un elemento a otro. Los eventos de este tipo los
genera el sistema de automatización de la interfaz de usuario, no los proveedores.

AutomationPropertyChangedEventArgs Contiene información sobre un cambio en un valor de propiedad de un elemento o patrón de control.

StructureChangedEventArgs Contiene información sobre un cambio en el árbol de automatización de la interfaz de usuario.

WindowClosedEventArgs Contiene información sobre el cierre de una ventana.

Todas las clases de los argumentos de evento contienen un miembro EventId . Este identificador se encapsula en un AutomationEvent.

Los proveedores obtienen los objetos AutomationEvent , usados para identificar los eventos, a partir de los campos de
AutomationElementIdentifiers y de las clases de identificadores de patrones de control como DockPatternIdentifiers. Las aplicaciones
cliente obtienen los campos equivalentes a partir de campos de AutomationElement y de clases de patrones de control como DockPattern.

Para obtener una lista de identificadores de eventos, consulte UI Automation Events for Clients.

Consulte también
Eventos de UI Automation para clientes
Implementación del proveedor de UI Automation en el servidor
Suscribirse a eventos de UI Automation
Información general sobre la seguridad
de UI Automation
Artículo • 10/05/2023

7 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 esta introducción se describe el modelo de seguridad de Microsoft Automatización


de la interfaz de usuario en Windows Vista.

Control de cuentas de usuario


La seguridad es un aspecto muy importante de Windows Vista y una de las innovaciones
es la posibilidad de que los usuarios ejecuten como usuarios estándar (no
administrador) sin que necesariamente se les impida ejecutar aplicaciones y servicios
que requieren privilegios más altos.

En Windows Vista, la mayoría de las aplicaciones se proporcionan con un token estándar


o un token administrativo. Si una aplicación no se puede identificar como aplicación
administrativa, se inicia como aplicación estándar de forma predeterminada. Para poder
iniciar una aplicación identificada como administrativa, Windows Vista pide al usuario su
consentimiento para ejecutar la aplicación con privilegios elevados. La petición de
consentimiento se muestra de forma predeterminada, aunque el usuario sea miembro
del grupo de administradores local, porque los administradores ejecutan como usuarios
estándar hasta que una aplicación o un componente del sistema que requiere
credenciales administrativas solicita permiso para ejecutarse.

Tareas que requieren privilegios de mayor nivel


Cuando un usuario intenta realizar una tarea que requiere privilegios administrativos,
Windows Vista presenta un cuadro de diálogo que pide al usuario su consentimiento
para continuar. Este cuadro de diálogo está protegido contra la comunicación entre
procesos, por lo que el software malintencionado no puede simular una entrada de
usuario. De forma similar, la pantalla de inicio de sesión de escritorio normalmente no
es accesible para otros procesos.

Los clientes de Automatización de la interfaz de usuario deben comunicarse con otros


procesos, algunos de los cuales podrían ejecutarse con un nivel de privilegios superior.
Los clientes también podrían necesitar acceder a los cuadros de diálogo del sistema que
normalmente no son visibles para otros procesos. Por lo tanto, el sistema debe confiar
en los clientes de UI y se deben ejecutar con privilegios especiales.

Para que las aplicaciones sean de confianza y poder comunicarse con aplicaciones que
se ejecutan con un nivel de privilegios superior, deben estar firmadas.

Archivo de manifiesto
Para obtener acceso a la UI protegida del sistema, las aplicaciones deben compilarse
con un archivo de manifiesto que incluya un atributo uiAccess en la etiqueta
requestedExecutionLevel , como sigue:

XML

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="highestAvailable"
uiAccess="true" />
</requestedPrivileges>
</security>
</trustInfo>

El valor del atributo level en este código es solo un ejemplo.

uiAccess es «falso» de forma predeterminada; es decir, si se omite el atributo o si no

hay ningún manifiesto para el ensamblado, la aplicación no podrá acceder a la UI


protegida.
Utilizar la UI Automation para pruebas
automatizadas
Artículo • 10/05/2023

7 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 esta introducción se describe cómo Automatización de la interfaz de usuario de


Microsoft puede ser de utilidad como marco de trabajo para el acceso mediante
programación en escenarios de pruebas automatizadas.

Automatización de la interfaz de usuario ofrece un modelo de objetos unificado que


permite a todos los marcos de trabajo de interfaz de usuario exponer funcionalidades
complejas y enriquecidas de una manera accesible y fácil de automatizar.

Automatización de la interfaz de usuario se desarrolló como sucesor de Microsoft Active


Accessibility. Active Accessibility es un marco de trabajo existente diseñado para ofrecer
una solución para hacer que los controles y las aplicaciones sean accesibles. Active
Accessibility no se diseñó teniendo en cuenta la automatización de pruebas incluso
cuando evolucionó hacia ese rol debido a los requisitos de accesibilidad y
automatización muy similares. Automatización de la interfaz de usuario, además de
proporcionar soluciones más refinadas para mejorar la accesibilidad, se ha diseñado de
manera específica para ofrecer una sólida funcionalidad para pruebas automatizadas.
Por ejemplo, Active Accessibility se basa en una única interfaz tanto para exponer
información sobre la interfaz de usuario como para recopilar la información necesaria
para los productos de AT; Automatización de la interfaz de usuario separa los dos
modelos.

Se requieren tanto un proveedor como un cliente para implementar Automatización de


la interfaz de usuario para que sea útil como herramienta de pruebas automatizadas.
Los proveedores de automatización de la interfaz de usuario son aplicaciones como
Microsoft Word, Excel y otras aplicaciones de terceros o controles basados en el sistema
operativo Microsoft Windows. Los clientes de automatización de interfaz de usuario
incluyen scripts de pruebas y aplicaciones de tecnología de asistencia.
7 Nota

El propósito de esta información general es mostrar las capacidades de pruebas


automatizadas nuevas y mejoradas de Automatización de la interfaz de usuario.
Esta información general no está pensada para ofrecer información sobre las
características de accesibilidad y no abordará la accesibilidad más allá de cuando
sea necesario.

Automatización de la interfaz de usuario en un


proveedor
Para que se automatice una interfaz de usuario, un desarrollador de una aplicación o
control debe mirar las acciones que usuario final puede llevar a cabo en el objeto de
interfaz de usuario mediante la interacción del teclado y del mouse estándar.

Cuando se hayan identificado estas acciones de claves, los patrones de control


Automatización de la interfaz de usuario correspondientes (es decir, los patrones de
control que reflejan la funcionalidad y el comportamiento del elemento de la interfaz de
usuario) deben implementarse en el control. Por ejemplo, la interacción del usuario con
un control de cuadro combinado (por ejemplo, el cuadro de diálogo Ejecutar) suele
implicar expandir y contraer el cuadro combinado para ocultar o mostrar una lista de
elementos, seleccionar un elemento de esa lista o agregar un nuevo valor mediante la
entrada del teclado.

7 Nota

Con otros modelos de accesibilidad, los desarrolladores deben recopilar


información directamente desde distintos botones, menús u otros controles
individuales. Lamentablemente, cada tipo de control se presenta con docenas de
pequeñas variaciones. Es decir, aunque diez variaciones de un pulsador pueden
funcionar de la misma manera y realizar la misma función, todas deben tratarse
como controles únicos. No hay ninguna manera de saber que estos controles sean
funcionalmente equivalentes. Los patrones de control se desarrollaron para
representar estos comportamientos de control comunes. Para obtener más
información, consulta UI Automation Control Patterns Overview.

Implementación de automatización de interfaz de usuario


Como se ha mencionado anteriormente, sin el modelo unificado ofrecido por
Automatización de la interfaz de usuario, las herramientas de prueba y los
desarrolladores deben conocer la información específica del marco de trabajo para
exponer propiedades y comportamientos de los controles en ese marco de trabajo.
Dado que puede haber varios marcos de trabajo diferentes de interfaz de usuario
presentes en cualquier momento único dentro de sistemas operativos Windows,
incluidos Win32, Windows Forms y Windows Presentation Foundation (WPF), puede
resultar una tarea desalentadora probar varias aplicaciones con controles que parezcan
similares. Por ejemplo, en la siguiente tabla se describen los nombres de propiedades
específicas del marco de trabajo necesarias para recuperar el nombre (o el texto)
asociado a un control de botón y se muestra la única propiedad Automatización de la
interfaz de usuario equivalente.

Tipo de control de Marco de Propiedad Propiedad de


automatización de interfaz de específica de automatización de
interfaz de usuario usuario marco de trabajo interfaz de usuario

Botón Windows Contenido NameProperty


Presentation
Foundation

Botón Win32 Caption NameProperty

Imagen HTML alt NameProperty

Los proveedores de Automatización de la interfaz de usuario son responsables de


asignar las propiedades específicas del marco de trabajo de sus controles a las
propiedades de Automatización de la interfaz de usuario equivalentes.

Encontrará la información sobre la implementación de Automatización de la interfaz de


usuario en Proveedores de Automatización de la interfaz de usuario para código
administrado. La información sobre la implementación de patrones de control está
disponible en UI Automation Control Patterns y UI Automation Text Pattern.

Automatización de la interfaz de usuario en un


cliente
El objetivo de muchos escenarios y herramientas de pruebas automatizadas es la
manipulación coherente y repetible de la interfaz de usuario. Esto puede incluir
controles específicos para pruebas de unidad a través de la grabación y reproducción de
scripts de pruebas que recorrer una serie de acciones genéricas en un grupo de
controles.
Una complicación que surge de las aplicaciones automatizadas es la dificultad de
sincronizar una prueba con un destino dinámico. Por ejemplo, un control de cuadro de
lista, como el incluido en el Administrador de tareas de Windows, que muestra una lista
de aplicaciones actualmente en ejecución. Dado que los elementos del cuadro de lista
se actualizan de manera dinámica fuera del control de la aplicación de prueba, resulta
imposible repetir la selección de un elemento específico en el cuadro de lista con
coherencia. También pueden surgir problemas similares al intentar repetir cambios de
enfoque simples en una interfaz de usuario que se encuentra fuera del control de la
aplicación de prueba.

Acceso mediante programación


El acceso mediante programación ofrece la capacidad de imitar, mediante código,
cualquier interacción y experiencia expuestos por mouse tradicional y entrada de
teclado. permite el acceso mediante programación a través de cinco componentes:

El árbol de Automatización de la interfaz de usuario facilita la navegación por la


estructura de la interfaz de usuario. El árbol se crea a partir de la colección de
hWnd. Para obtener más información, vea UI Automation Tree Overview

Los elementos de automatización son componentes individuales en la interfaz de


usuario. A menudo pueden ser más granulares que un hWnd. Para obtener más
información, consulta UI Automation Control Types Overview.

Las propiedades de Automatización proporcionan información específica sobre los


elementos de la interfaz de usuario. Para obtener más información, consulta UI
Automation Properties Overview.

Los patrones de control definen un aspecto concreto de la funcionalidad de un


control; puede constar de propiedad, método, evento e información de estructura.
Para obtener más información, consulta UI Automation Control Patterns Overview.

Los eventos de automatización ofrecen información y notificaciones de eventos.


Para obtener más información, consulta UI Automation Events Overview.

Propiedades de clave para la automatización de pruebas


La capacidad de identificar de forma exclusiva y de encontrar posteriormente cualquier
control dentro de la interfaz de usuario ofrece la base para que las aplicaciones de
pruebas automatizadas operen en esa interfaz de usuario. Hay varias propiedades de
Automatización de la interfaz de usuario de Microsoft que usan los clientes y
proveedores que ayudan en esto.
AutomationID
Identifica de manera única un elemento de automatización de sus elementos del mismo
nivel. AutomationIdProperty no se localiza, a diferencia de una propiedad como
NameProperty que suele localizarse si un producto se distribuye en varios idiomas. Vea
Use the AutomationID Property.

7 Nota

AutomationIdProperty no garantiza una identidad única en todo el árbol de


automatización. Por ejemplo, una aplicación puede contener un control de menú
con varios elementos de menú de nivel superior que, a su vez, tienen varios
elementos de menú secundarios. Estos elementos de menú secundarios pueden
identificarse mediante un esquema genérico como "Elemento1, elemento 2, Item3,
etc.", lo que permite identificadores duplicados para elementos secundarios en los
elementos del menú de nivel superior.

ControlType
Identifica el tipo de control representado por un elemento de automatización. Se puede
deducir información significativa del conocimiento del tipo de control. Vea UI
Automation Control Types Overview.

NameProperty
Es una cadena de texto que identifica o explica un control. NameProperty debe usarse
con precaución, ya que se puede localizar. Vea UI Automation Properties Overview.

Implementación de la automatización de interfaz de


usuario en una aplicación de prueba

Paso Descripción
Paso Descripción

Agregue las referencias de Aquí se muestran las dll de Automatización de la interfaz de


automatización de interfaz de usuario necesarias para los clientes de automatización de la
usuario. interfaz de usuario.

- UIAutomationClient.dll ofrece acceso a las API de


Automatización de la interfaz de usuario del lado de cliente.
-UIAutomationClientSideProvider.dll ofrece la capacidad de
automatizar controles de Win32. Vea UI Automation Support
for Standard Controls.
- UIAutomationTypes.dll ofrece acceso a los tipos específicos
definidos en Automatización de la interfaz de usuario.

Agregue el espacio de nombres Este espacio de nombres contiene todo lo que los clientes de
System.Windows.Automation . Automatización de la interfaz de usuario necesitan para usar
las capacidades de Automatización de la interfaz de usuario
excepto el control del texto.

Agregue el espacio de nombres Este espacio de nombres contiene todo lo que un cliente de
System.Windows.Automation.Text Automatización de la interfaz de usuario necesita para usar
. las capacidades de control de texto de Automatización de la
interfaz de usuario.

Busque controles de interés. Los scripts de pruebas automatizadas localizan elementos de


automatización de la interfaz de usuario que representan
controles de interés dentro del árbol de automatización.

Hay varias maneras de obtener elementos de automatización


de interfaz de usuario con código.

- Consulta la interfaz de usuario mediante una instrucción


Condition. Normalmente es donde se usa
AutomationIdProperty independiente del lenguaje. Nota: Un
AutomationIdProperty se puede obtener mediante una
herramienta como Inspect.exe que es capaz de detallar las
propiedades Automatización de la interfaz de usuario de un
control.

- Use la clase TreeWalker para recorrer todo el árbol de


Automatización de la interfaz de usuario o un subconjunto de
los mismos.
- Realice un seguimiento del enfoque.
- Use el hWnd del control.
- Utilice la ubicación de la pantalla, como la ubicación del
cursor del mouse.

Vea Obtaining UI Automation Elements


Paso Descripción

Obtenga patrones de control. Los patrones de control exponen comportamientos comunes


para controles de funciones similares.

Después de encontrar los controles que requieren pruebas,


los scripts de pruebas automatizadas obtienen los patrones
de control de interés de los elementos de automatización de
la interfaz de usuario. Por ejemplo, el patrón de control
InvokePattern para la funcionalidad de botón normal o el
patrón de control WindowPattern para la funcionalidad de la
ventana.

Vea UI Automation Control Patterns Overview.

Automatice la interfaz de usuario. Los scripts de pruebas automatizadas pueden controlar ahora
cualquier interfaz de usuario de interés a partir de un marco
de trabajo de interfaz de usuario mediante la información y la
funcionalidad expuestas por los patrones de control de
Automatización de la interfaz de usuario.

Herramientas y tecnologías relacionadas


Hay una serie de tecnologías y herramientas relacionadas que admiten pruebas
automatizadas con Automatización de la interfaz de usuario.

Inspect.exe es una aplicación de interfaz gráfica de usuario (GUI) que se puede


usar para recopilar información de Automatización de la interfaz de usuario para la
depuración y el desarrollo del proveedor y el cliente. Inpect.exe se incluye en
Windows SDK.

MSAABridge expone información de la Automatización de la interfaz de usuario a


los clientes de Active Accessibility. El objetivo principal de crear un puente entre
Automatización de la interfaz de usuario y Active Accessibility es permitir a los
clientes existentes de Active Accessibility la capacidad de interactuar con cualquier
marco de trabajo que ha implementado Automatización de la interfaz de usuario.

Seguridad
Para obtener información de seguridad, vea UI Automation Security Overview.

Consulte también
Fundamentos de UI Automation
Proveedores de UI Automation para
código administrado
Artículo • 10/05/2023

7 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 sección contiene información general y temas de procedimientos que describen


cómo escribir proveedores de Microsoft Automatización de la interfaz de usuario para
elementos de interfaz de usuario (UI) personalizados.

En esta sección
Implementación del proveedor de Automatización de la interfaz de usuario del lado
servidorAutomatización de la interfaz de usuario Información general sobre la
implementación del proveedor de Automatización de la interfaz de usuario del lado
cliente Temas
Implementación del proveedor de UI
Automation en el servidor
Artículo • 10/05/2023

7 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 esta sección se describe cómo implementar un proveedor de automatización de la


interfaz de usuario del lado servidor para un control personalizado.

La implementación de elementos Windows Presentation Foundation (WPF) y elementos


que no son de WPF (como los diseñados para Windows Forms) es fundamentalmente
diferente. Los elementos WPF son compatibles con Automatización de la interfaz de
usuario mediante una clase derivada de AutomationPeer. Los elementos que no son de
WPF lo consiguen a través de implementaciones de interfaces de proveedor.

Consideraciones sobre la seguridad


Los proveedores deben escribirse para funcionar en un entorno de confianza parcial.
Dado que UIAutomationClient.dll no está configurado para ejecutarse con confianza
parcial, el código del proveedor no debe hacer referencia a ese ensamblado. En caso
contrario, el código podría ejecutarse en un entorno de plena confianza, pero se
producirá un error en un entorno de confianza parcial.

De forma específica, no use los campos de las clases de UIAutomationClient.dll, como


los de AutomationElement. En su lugar, use los campos equivalentes de las clases de
UIAutomationTypes.dll, como AutomationElementIdentifiers.

Implementación del proveedor con los


elementos de Windows Presentation
Foundation
Para obtener más información sobre este tema, consulte Automatización de la interfaz
de usuario de un control personalizado de WPF.

Implementación del proveedor con elementos


que no son de WPF
Los controles personalizados que no forman parte del marco de WPF, pero están
escritos en el código administrado (en la mayoría de las ocasiones se trata de controles
de Windows Forms), son compatibles con Automatización de la interfaz de usuario
gracias a la implementación de interfaces. Cada elemento debe implementar al menos
una de las interfaces enumeradas en la primera tabla de la sección siguiente. Además, si
el elemento es compatible con uno o varios patrones de control, debe implementar la
interfaz adecuada para cada uno de ellos.

El proyecto del proveedor de Automatización de la interfaz de usuario debe hacer


referencia a los ensamblados siguientes:

UIAutomationProviders.dll

UIAutomationTypes.dll

WindowsBase.dll

Interfaces de proveedor
Cada proveedor de Automatización de la interfaz de usuario debe implementar una de
las interfaces siguientes:

Interfaz Descripción

IRawElementProviderSimple Proporciona funcionalidad para un control simple


hospedado en una ventana. Es compatible con las
propiedades y los patrones de control.

IRawElementProviderFragment Se hereda de IRawElementProviderSimple. Agrega una


funcionalidad para un elemento de un control complejo,
incluida la navegación por el fragmento, el establecimiento
del foco y la devolución del rectángulo delimitador del
elemento.
Interfaz Descripción

IRawElementProviderFragmentRoot Se hereda de IRawElementProviderFragment. Agrega


funcionalidad para el elemento raíz de un control complejo,
incluida la ubicación de un elemento secundario en las
coordenadas especificadas y el establecimiento del estado
del foco global del control.

Las interfaces siguientes incrementan la funcionalidad, pero no se requiere su


implementación.

Interfaz Descripción

IRawElementProviderAdviseEvents Habilita al proveedor para realizar un seguimiento de las


solicitudes de eventos.

IRawElementProviderHwndOverride Habilita la reordenación de los elementos basados en


ventanas en el árbol de Automatización de la interfaz de
usuario de un fragmento.

Todas las demás interfaces del espacio de nombres de


System.Windows.Automation.Provider son compatibles con el patrón de control.

Requisitos para los proveedores que no son de WPF


Para comunicarse con Automatización de la interfaz de usuario, el control debe
implementar las áreas principales de funcionalidad siguientes:

Funcionalidad Implementación

Exposición del En respuesta a un mensaje WM_GETOBJECT enviado a la ventana de


proveedor a control, devuelva el objeto que implementa
Automatización de la IRawElementProviderSimple (o una interfaz derivada). En el caso de los
interfaz de usuario fragmentos, debe ser el proveedor de las raíces correspondientes.

Proporcionar valores de Implemente GetPropertyValue para proporcionar o reemplazar


propiedad valores.

Habilitar al cliente para Implemente interfaces compatibles con los patrones de control, como
interactuar con el IInvokeProvider. Devuelva estos proveedores de patrones en la
control implementación de GetPatternProvider.

Generar eventos Llame a uno de los métodos estáticos de AutomationInteropProvider


para generar un evento que pueda escuchar un cliente.
Funcionalidad Implementación

Habilitar la navegación y Implemente IRawElementProviderFragment para cada elemento del


el establecimiento del fragmento (no es necesario para los elementos que no forman parte
foco en un fragmento de un fragmento).

Habilitar el Implemente IRawElementProviderFragmentRoot. (no es necesario para


establecimiento del foco los elementos que no son raíces de fragmento).
y la ubicación del
elemento secundario de
un fragmento

Valores de propiedad de los proveedores que no son de


WPF
En lo que respecta a los controles personalizados, los proveedores de Automatización
de la interfaz de usuario deben ofrecer compatibilidad con ciertas propiedades que
pueden usar tanto el sistema de automatización como las aplicaciones cliente. Para los
elementos que se hospedan en ventanas (HWND), Automatización de la interfaz de
usuario puede recuperar algunas propiedades del proveedor de ventana
predeterminado, pero debe obtener otras del proveedor personalizado.

Por lo general, en lo que respecta a los controles basados en HWND, los proveedores
no necesitan proporcionar las propiedades siguientes (identificadas por los valores de
campo):

BoundingRectangleProperty

ClickablePointProperty

ProcessIdProperty

ClassNameProperty

HasKeyboardFocusProperty

IsEnabledProperty

IsKeyboardFocusableProperty

IsPasswordProperty

NameProperty

RuntimeIdProperty
7 Nota

El objeto RuntimeIdProperty de un elemento simple o una raíz de fragmento


hospedada en una ventana se obtiene de la ventana. No obstante, los elementos
del fragmento situados debajo de la raíz (por ejemplo, los elementos de lista de un
cuadro de lista) deben proporcionar sus propios identificadores. Para obtener más
información, vea GetRuntimeId.

Los proveedores hospedados en un control de Windows Forms deben devolver el


elemento IsKeyboardFocusableProperty. En este caso, es posible que el proveedor
de ventana predeterminado no consiga recuperar el valor correcto.

Por lo general, el elemento NameProperty lo proporciona el proveedor de host.


Por ejemplo, si se deriva un control personalizado de Control, el nombre derivará
de la propiedad Text del control.

Para obtener código de ejemplo, vea Return Properties from a UI Automation Provider.

Eventos de proveedores que no son de WPF


Los proveedores de Automatización de la interfaz de usuario deben generar eventos
para notificar a las aplicaciones cliente los cambios en el estado de la interfaz de
usuario. Para generar eventos, se usan los métodos siguientes:

Método Descripción

RaiseAutomationEvent Genera varios eventos, incluidos los que desencadenan


los patrones de control.

RaiseAutomationPropertyChangedEvent Genera un evento cuando una propiedad de


Automatización de la interfaz de usuario ha cambiado.

RaiseStructureChangedEvent Genera un evento cuando la estructura del árbol de


Automatización de la interfaz de usuario ha cambiado.
Por ejemplo, cuando se agrega o elimina un elemento.

El propósito de un evento es notificar al cliente algo que ha sucedido en la interfaz de


usuario, independientemente de si el propio sistema de Automatización de la interfaz
de usuario desencadena o no la actividad. Por ejemplo, el evento que identifica
InvokedEvent debe generarse siempre que se invoca el control a través de la entrada
directa del usuario o cuando la aplicación cliente llama a Invoke.
Para optimizar el rendimiento, un proveedor puede generar eventos de forma selectiva
o no generarlos en absoluto si no se registra ninguna aplicación cliente para recibirlos.
Para conseguir esta optimización, se usan los métodos siguientes:

Método Descripción

ClientsAreListening Esta propiedad estática especifica si alguna aplicación cliente


se ha suscrito a eventos de Automatización de la interfaz de
usuario.

IRawElementProviderAdviseEvents La implementación del proveedor de esta interfaz en una raíz


de fragmento permite recibir información cuando los clientes
registran controladores de eventos o anulan su registro en
los eventos del fragmento.

Navegación de proveedores que no son de WPF


Los proveedores de los controles simples, como los botones personalizados
hospedados en ventanas (HWND), no deben tienen que ser compatibles necesariamente
con la navegación dentro del árbol de Automatización de la interfaz de usuario. La
navegación hacia y desde el elemento se controla con el proveedor predeterminado de
la ventana host, que se especifica en la implementación de HostRawElementProvider.
Sin embargo, cuando se implementa un proveedor para un control personalizado
complejo, sí se debe admitir la navegación entre el nodo raíz del fragmento y sus
descendientes, y entre los nodos del mismo nivel.

7 Nota

Los elementos de un fragmento que no sea la raíz deben devolver una referencia
null desde HostRawElementProvider, ya que no se hospedan directamente en
una ventana y ningún proveedor predeterminado admite la navegación hacia y
desde ellos.

La estructura del fragmento queda determinada por la implementación de Navigate.


Este método devuelve el objeto de proveedor para el elemento en cada dirección
posible, desde cada fragmento. Si no hay ningún elemento en una dirección
determinada, el método devuelve una referencia null .

La raíz de fragmento solo permite navegar hacia los elementos secundarios. Por
ejemplo, un cuadro de lista devuelve el primer elemento de la lista cuando la dirección
es FirstChild, y el último elemento cuando la dirección es LastChild. La raíz de fragmento
no admite la navegación a un elemento primario o del mismo nivel. Esto se controla
desde el proveedor de ventana host.

Los elementos de un fragmento que no son la raíz deben admitir la navegación hacia el
elemento primario, sus elementos secundarios y los elementos del mismo nivel que
estos contengan.

Reorganización dinámica de relación jerárquica de


proveedores que no son de WPF
Las ventanas emergentes son en realidad ventanas de nivel superior. Por ello, aparecen
de forma predeterminada en el árbol de Automatización de la interfaz de usuario como
elementos secundarios del escritorio. No obstante, en muchos casos, las ventanas
emergentes son, lógicamente, elementos secundarios de otros controles. Por ejemplo, la
lista desplegable de un cuadro combinado es, lógicamente, un elemento secundario de
dicho cuadro. De forma similar, una ventana emergente de menú es, lógicamente, un
elemento secundario de un menú. Automatización de la interfaz de usuario permite
reorganizar de forma dinámica la relación jerárquica de las ventanas emergentes para
que parezcan elementos secundarios del control asociado.

Para reorganizar de forma dinámica la relación jerárquica de una ventana emergente:

1. Cree un proveedor para la ventana emergente. Para ello, se debe conocer por
adelantado la clase de la ventana emergente.

2. Implemente todas las propiedades y los patrones con el proceso habitual para los
elementos emergentes, como si se tratase de un control por derecho propio.

3. Implemente la propiedad HostRawElementProvider para que devuelva el valor


obtenido de HostProviderFromHandle, donde el parámetro es el identificador de
ventana de la ventana emergente.

4. Implemente Navigate para la ventana emergente y su elemento primario, de modo


que la navegación pueda controlarse correctamente desde el elemento primario
lógico hacia los elementos secundarios lógicos, y entre los elementos secundarios
del mismo nivel.

Cuando Automatización de la interfaz de usuario encuentra la ventana emergente,


reconoce que se está reemplazando la configuración predeterminada de la navegación
y omite esta ventana cuando se encuentra como elemento secundario del escritorio. En
su lugar, solo podrá accederse al nodo a través del fragmento.
La reorganización dinámica de relación jerárquica no es adecuada cuando un control
puede hospedar una ventana de cualquier clase. Por ejemplo, un rebar puede hospedar
cualquier tipo de HWND en sus bandas. Para controlar estos casos, Automatización de
la interfaz de usuario permite reubicar HWND con un procedimiento alternativo, que se
describe en la sección siguiente.

Reordenación de proveedores que no son de WPF


Los fragmentos de Automatización de la interfaz de usuario pueden contener dos o más
elementos, contenidos todos ellos en ventanas (HWND). Dado que cada HWND tiene su
propio proveedor predeterminado que lo considera como elemento secundario de otro
HWND contenedor, el árbol de Automatización de la interfaz de usuario mostrará, de
forma predeterminada, los HWND del fragmento como elementos secundarios de la
ventana primaria. En la mayoría de los casos este sería el comportamiento deseable,
pero a veces puede llevar a confusión porque no coincide con la estructura lógica de la
interfaz de usuario.

Un buen ejemplo de esto lo constituye un control rebar. Un rebar contiene bandas, cada
una de las cuales puede incluir a su vez un control basado en HWND, como una barra
de herramientas, un cuadro de edición o un cuadro combinado. El proveedor de
ventana predeterminado del HWND de rebar considera los HWND del control de banda
como elementos secundarios, y el proveedor de rebar considera las bandas como
elementos secundarios. Dado que los proveedores de HWND y rebar trabajan en
tándem y combinan sus elementos secundarios, tanto las bandas como los controles
basados en HWND aparecen como elementos secundarios del rebar. Sin embargo,
lógicamente, solo deberían aparecer las bandas como elementos secundarios del rebar,
y cada proveedor de banda debería acoplarse con el proveedor de HWND
predeterminado para el control que contiene.

Para ello, el proveedor de raíz de fragmento del rebar expone un conjunto de elementos
secundarios que representan a las bandas. Cada banda tiene un proveedor único que
puede exponer propiedades y patrones. En su implementación de
HostRawElementProvider, el proveedor de banda devuelve el proveedor de ventana
predeterminado para el HWND de control. Para obtenerlo, llama a
HostProviderFromHandley pasa el identificador de ventana del control. Por último, el
proveedor de raíz de fragmento del rebar implementa la interfaz de
IRawElementProviderHwndOverride y, en su implementación de
GetOverrideProviderForHwnd , devuelve el proveedor de banda adecuado para el
control que contiene el HWND especificado.
Consulte también
Información general sobre proveedores de UI Automation
Exponer un proveedor de UI Automation en el servidor
Devolución de propiedades por parte de un proveedor de UI Automation
Provocar eventos desde un proveedor de UI Automation
Habilitar la navegación en un proveedor de fragmentos de UI Automation
Patrones de control compatibles en un proveedor de UI Automation
Información general sobre proveedores
de UI Automation
Artículo • 10/05/2023

7 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.

Los proveedores de automatización de la interfaz de usuario permiten a los controles


comunicarse con aplicaciones de cliente de automatización de la interfaz de usuario. En
general, cada control u otro elemento distinto de una interfaz de usuario (UI) está
representado por un proveedor. El proveedor expone información sobre el elemento y,
opcionalmente, implementa patrones de control que permiten a la aplicación cliente
interactuar con el control.

Las aplicaciones cliente no suelen tener que trabajar directamente con proveedores. La
mayoría de los controles estándar de las aplicaciones que usan los marcos win32,
Windows Forms o Windows Presentation Foundation (WPF) se exponen
automáticamente al sistema de automatización de la interfaz de usuario. Las
aplicaciones que implementan controles personalizados también pueden implementar
proveedores de automatización de la interfaz de usuario para esos controles y las
aplicaciones cliente no tienen que realizar ningún paso especial para obtener acceso a
ellos.

En este tema se ofrece información general sobre la manera en que los desarrolladores
de controles implementan proveedores de la interfaz de usuario, especialmente para
controles en las ventanas de Windows Forms y Win32.

Tipos de proveedores
Los proveedores de automatización de la interfaz de usuario se dividen en dos
categorías: proveedores del lado cliente y proveedores del lado servidor.

Proveedores del lado cliente


Los proveedores de cliente se implementan por los clientes de automatización de la
interfaz de usuario para comunicarse con una aplicación que no admite, o no admite
por completo, interfaz de usuario. Los proveedores del lado cliente suelen comunicarse
con el servidor a través del límite del proceso enviando y recibiendo mensajes de
Windows.

Dado que los proveedores de automatización de la interfaz de usuario para los


controles de las aplicaciones Win32, Windows Forms o WPF se ofrecen como parte del
sistema operativo, las aplicaciones cliente rara vez tienen que implementar sus propios
proveedores y en esta información general no se tratan más.

Proveedores del lado servidor


Los proveedores del lado servidor se implementan mediante controles personalizados o
aplicaciones que se basan en un marco de trabajo de la interfaz de usuario distinto de
Win32, Windows Forms o WPF.

Los proveedores del lado servidor se comunican con aplicaciones cliente a través del
límite de proceso al exponer interfaces al sistema principal de automatización de la
interfaz de usuario, que a su vez atiende solicitudes de los clientes.

Conceptos del proveedor de la automatización


de la interfaz de usuario
En esta sección se ofrecen breves explicaciones de algunos de los conceptos clave que
debe entender para implementar proveedores de automatización de la interfaz de
usuario.

Elementos
Los elementos de automatización de la interfaz de usuario son partes de la interfaz de
usuario que son visibles para los clientes de la automatización de la interfaz de usuario.
Entre los ejemplos se incluyen ventanas de aplicación, paneles, botones, información
sobre herramientas, cuadros de lista y elementos de lista.

Navegación
Elementos de automatización de la interfaz de usuario se exponen a los clientes como
un árbol de automatización de la interfaz de usuario. La automatización de la interfaz de
usuario construye el árbol navegando de un elemento a otro. Los proveedores habilitan
la navegación para cada elemento y cada uno de ellos puede señalar a un elemento
primario, elementos del mismo nivel y elementos secundarios.

Para más información sobre la vista del cliente del árbol automatización de la interfaz de
usuario, vea UI Automation Tree Overview.

Vistas
Un cliente puede ver el árbol de automatización de la interfaz de usuario en tres vistas
principales, como se muestra en la tabla siguiente.

Ver Descripción

Vista sin formato Contiene todos los elementos.

Vista de control Contiene elementos que son controles.

Vista de contenido Contiene elementos que tienen contenido.

Para más información sobre vistas del cliente del árbol automatización de la interfaz de
usuario, vea UI Automation Tree Overview.

Es responsabilidad de la implementación del proveedor definir un elemento como un


elemento de contenido o un elemento de control. Los elementos de control pueden o
no ser elementos de contenido, pero todos los elementos de contenido son elementos
de control.

Marcos de trabajo
Un marco de trabajo es un componente que administra controles secundarios, pruebas
de aciertos y representación en un área de la pantalla. Por ejemplo, una ventana de
Win32, que a menudo se conoce como HWND, puede actuar como un marco de trabajo
que contiene varios elementos de automatización de la interfaz de usuario como una
barra de menús, una barra de estado y botones.

Los controles de contenedor de Win32 como cuadros de lista y vistas de árbol se


consideran marcos de trabajo, porque contienen su propio código para representar
elementos secundarios y realizar pruebas de aciertos en ellos. Por el contrario, un
cuadro de lista de WPF no es un marco de trabajo, porque la representación y las
pruebas de aciertos se controlan mediante la ventana que lo contiene.

La interfaz de usuario de una aplicación se puede componer de diferentes marcos de


trabajo. Por ejemplo, una ventana de aplicación HWND podría incluir el HTML dinámico
(DHTML) que a su vez contiene un componente como un cuadro combinado en un
HWND.

Fragments
Un fragmento es un subárbol completo de elementos de un marco de trabajo
determinado. El elemento del nodo raíz del subárbol se denomina raíz del fragmento.
Una raíz de fragmento no tiene un elemento primario, pero se hospeda dentro de algún
otro marco de trabajo, normalmente una ventana de Win32 (HWND).

Hosts
El nodo raíz de cada fragmento se debe hospedar en un elemento, normalmente una
ventana de Win32 (HWND). La excepción es el escritorio, que no se hospeda en ningún
otro elemento. El host de un control personalizado es el HWND del propio control, no la
ventana de la aplicación o cualquier otra ventana que pueda contener grupos de
controles de nivel superior.

El host de un fragmento desempeña un papel importante en el suministro de servicios


de automatización de la interfaz de usuario. Permite la navegación a la raíz del
fragmento y ofrece algunas propiedades predeterminadas para que el proveedor
personalizado no tenga que implementarlas.

Consulte también
Implementación del proveedor de UI Automation en el servidor
Implementación del proveedor de UI
Automation en el cliente
Artículo • 10/05/2023

7 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.

Hay varios marcos de interfaz de usuario (UI) diferentes en uso en sistemas operativos
Microsoft, incluidos Win32, Windows Forms y Windows Presentation Foundation (WPF).
Automatización de la interfaz de usuario expone información sobre los elementos de
interfaz de usuario a los clientes. Sin embargo, la propia Automatización de la interfaz
de usuario no tiene conocimiento de los diferentes tipos de controles que existen en
estos marcos de trabajo y las técnicas que se necesitan para extraen información de
ellos. En su lugar, deja esta tarea a objetos denominados proveedores. Un proveedor
extrae información de un control concreto y proporciona esa información a
Automatización de la interfaz de usuario, que luego la presenta al cliente de una manera
coherente.

Los proveedores pueden existir en el lado servidor o en el lado cliente. El propio control
implementa un proveedor de lado servidor. Los elementos de WPF implementan
proveedores, como pueden hacerlo los controles de terceros escritos teniendo en
cuenta Automatización de la interfaz de usuario.

Sin embargo, los controles más antiguos como los de Win32 y Windows Forms no
admiten directamente Automatización de la interfaz de usuario. En su lugar, se sirven
estos controles por los proveedores que existen en el proceso del cliente y obtienen
información sobre los controles mediante la comunicación entre procesos; por ejemplo,
al supervisar mensajes de ventana hacia y desde los controles. Estos proveedores del
lado cliente a veces se denominan servidores proxy.

Windows Vista proporciona proveedores para controles Win32 y Windows Forms


estándar. Además, un proveedor de reserva ofrece compatibilidad de Automatización de
la interfaz de usuario parcial a cualquier control que no sea atendido por otro proxy o
proveedor del lado servidor pero que tenga una implementación de Active Accessibility
de Microsoft. Todos estos proveedores se cargan automáticamente y están disponibles
para las aplicaciones cliente.

Para más información sobre la compatibilidad con los controles de Win32 y Windows
Forms, consulte Compatibilidad de Automatización de la interfaz de usuario con
controles estándar.

Las aplicaciones también pueden registrar otros proveedores del lado cliente.

Distribución de proveedores del cliente


Automatización de la interfaz de usuario espera encontrar proveedores del lado cliente
en un ensamblado de código administrado. El espacio de nombres de este ensamblado
debería tener el mismo nombre que el ensamblado. Por ejemplo, un ensamblado
denominado ContosoProxies.dll contendría el espacio de nombres ContosoProxies. En el
espacio de nombres, cree una clase UIAutomationClientSideProviders . En la
implementación del campo ClientSideProviderDescriptionTable estático, cree una matriz
de estructuras ClientSideProviderDescription que describan los proveedores.

Registro y configuración de proveedores de


lado de cliente
Los proveedores del lado cliente de una biblioteca de vínculos dinámicos (DLL) se
cargan mediante una llamada a RegisterClientSideProviderAssembly. No es necesario
realizar ninguna acción por una aplicación cliente para usar los proveedores.

Los proveedores implementados en el propio código del cliente se registran mediante


RegisterClientSideProviders. Este método toma como argumento una matriz de
estructuras ClientSideProviderDescription y cada una de ellas especifica las siguientes
propiedades:

Una función de devolución de llamada que crea el objeto de proveedor.

El nombre de clase de los controles que suministrará el proveedor.

El nombre de la imagen de la aplicación (normalmente el nombre completo del


archivo ejecutable) que suministrará el proveedor.

Marcas que rigen la manera en que el nombre de clase se compara con las clases
de ventana que se encuentran en la aplicación de destino.
Los dos últimos parámetros son opcionales. El cliente puede especificar el nombre de la
imagen de la aplicación de destino cuando quiera usar diferentes proveedores para
distintas aplicaciones. Por ejemplo, el cliente puede usar un proveedor para un control
de vista de lista de Win32 de una aplicación conocida que admita el patrón de vista
múltiple y otro para un control similar de otra aplicación conocida que no lo hace.

Consulte también
Crear un proveedor de UI Automation en el cliente
Implementar proveedores de UI Automation en una aplicación cliente
Temas "Cómo..." sobre proveedores de
UI Automation para código
administrado
Artículo • 09/05/2023

7 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 sección contiene ejemplos de código que muestran tareas al escribir proveedores
de Automatización de la interfaz de usuario de Microsoft para elementos de la interfaz
de usuario (UI).

En esta sección
Exponer un proveedor de Automatización de la interfaz de usuario en el lado del
servidorDevolver propiedades desde un proveedor de Automatización de la interfaz de
usuarioGenerar eventos desde un proveedor de Automatización de la interfaz de
usuarioHabilitar la navegación en un proveedor de fragmentos de Automatización de la
interfaz de usuarioAdmitir patrones de control en un proveedor de Automatización de la
interfaz de usuarioCrear un proveedor de Automatización de la interfaz de usuario en el
lado del clienteImplementar proveedores de Automatización de la interfaz de usuario en
una aplicación cliente
Exponer un proveedor de UI
Automation en el servidor
Artículo • 09/05/2023

7 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.

Este tema contiene código de ejemplo que muestra cómo exponer un proveedor de
automatización de interfaz de usuario del lado servidor que se hospeda en una ventana
System.Windows.Forms.Control .

El ejemplo invalida el procedimiento de ventana para interceptar WM_GETOBJECT, que


es el mensaje enviado por el servicio principal de automatización de la interfaz de
usuario cuando una aplicación cliente solicita información sobre la ventana.

Ejemplo
C#

/// <summary>
/// Handles WM_GETOBJECT message; others are passed to base handler.
/// </summary>
/// <param name="m">Windows message.</param>
/// <remarks>
/// This method enables UI Automation to find the control.
/// In this example, the implementation of IRawElementProvider is in the
same class
/// as this method.
/// </remarks>
protected override void WndProc(ref Message m)
{
const int WM_GETOBJECT = 0x003D;

if ((m.Msg == WM_GETOBJECT) && ((int)(long)m.LParam ==


AutomationInteropProvider.RootObjectId))
{
m.Result = AutomationInteropProvider.ReturnRawElementProvider(
this.Handle, m.WParam, m.LParam,
(IRawElementProviderSimple)this);
return;
}
base.WndProc(ref m);
}

Consulte también
Información general sobre proveedores de UI Automation
Implementación del proveedor de UI Automation en el servidor
Devolución de propiedades por parte de
un proveedor de UI Automation
Artículo • 09/05/2023

7 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 incluye código de ejemplo en el que se muestra cómo un proveedor de


automatización de la interfaz de usuario puede devolver propiedades de un elemento a
las aplicaciones cliente.

Para cualquier propiedad que no admita explícitamente, el proveedor debe devolver


null ( Nothing en Visual Basic). Esto garantiza que UI Automation intenta obtener la
propiedad de otro origen, como el proveedor de la ventana de host.

Ejemplo
C#

/// <summary>
/// Gets provider property values.
/// </summary>
/// <param name="propId">Property identifier.</param>
/// <returns>The value of the property.</returns>
object IRawElementProviderSimple.GetPropertyValue(int propId)
{
if (propId == AutomationElementIdentifiers.NameProperty.Id)
{
return "Custom list control";
}
else if (propId == AutomationElementIdentifiers.ControlTypeProperty.Id)
{
return ControlType.List.Id;
}
else if (propId ==
AutomationElementIdentifiers.IsContentElementProperty.Id)
{
return true;
}
else if (propId ==
AutomationElementIdentifiers.IsControlElementProperty.Id)
{
return true;
}
else
{
return null;
}
}

Consulte también
Información general sobre proveedores de UI Automation
Implementación del proveedor de UI Automation en el servidor
Provocar eventos desde un proveedor
de UI Automation
Artículo • 10/05/2023

7 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.

Este tema contiene código de ejemplo que muestra cómo desencadenar un evento
desde un proveedor de Automatización de la interfaz de usuario.

Ejemplo
En el ejemplo siguiente, un evento de la automatización de la interfaz de usuario se
genera en la implementación de un control de botón personalizado. La implementación
permite a una aplicación cliente de Automatización de la interfaz de usuario simular un
clic de botón.

Para evitar un procesamiento innecesario, el ejemplo comprueba ClientsAreListening


para ver si se deben generar eventos.

C#

/// <summary>
/// Responds to a button click, regardless of whether it was caused by a
mouse or
/// keyboard click or by InvokePattern.Invoke.
/// </summary>
private void OnCustomButtonClicked()
{
// TODO Perform program actions invoked by the control.

// Raise an event.
if (AutomationInteropProvider.ClientsAreListening)
{
AutomationEventArgs args = new
AutomationEventArgs(InvokePatternIdentifiers.InvokedEvent);

AutomationInteropProvider.RaiseAutomationEvent(InvokePatternIdentifiers.Invo
kedEvent, this, args);
}
}

Consulte también
Información general sobre proveedores de UI Automation
Habilitar la navegación en un proveedor
de fragmentos de UI Automation
Artículo • 10/05/2023

7 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.

Este tema contiene código de ejemplo que muestra cómo habilitar la navegación en un
proveedor de automatización de interfaz de usuario para un elemento que está dentro
de un fragmento.

Ejemplo
El siguiente código de ejemplo implementa Navigate para un elemento de lista dentro
de una lista. El elemento primario es el elemento de cuadro de lista y los elementos del
mismo nivel son otros elementos de la colección de lista. El método devuelve null
( Nothing en Visual Basic) para las direcciones que no son válidas; en este caso, FirstChild
y LastChild, ya que el elemento no tiene elementos secundarios.

C#

/// <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;
}
}

Consulte también
Información general sobre proveedores de UI Automation
Implementación del proveedor de UI Automation en el servidor
Patrones de control compatibles en un
proveedor de UI Automation
Artículo • 10/05/2023

7 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.

C#

#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

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.

C#
/// <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;
}
}

Consulte también
Información general sobre proveedores de UI Automation
Implementación del proveedor de UI Automation en el servidor
Crear un proveedor de UI Automation
en el cliente
Artículo • 10/05/2023

7 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.

Este tema contiene código de ejemplo que muestra cómo implementar un proveedor
de Automatización de la interfaz de usuario del lado cliente.

Ejemplo
El ejemplo de código siguiente se puede compilar en una biblioteca de vínculos
dinámicos (DLL) que implemente un proveedor de cliente muy simple para una ventana
de consola. El código no tiene ninguna funcionalidad práctica, pero está pensado para
mostrar los pasos básicos para configurar un ensamblado de proveedor que se pueda
registrar mediante una aplicación de cliente de Automatización de la interfaz de usuario.

C#

using System;
using System.Windows.Automation;
using System.Windows.Automation.Provider;

namespace ClientSideProviderAssembly
{
// The assembly must implement a UIAutomationClientSideProviders class,
// and the namespace must be the same as the name of the DLL, so that
// UI Automation can find the table of descriptors. In this example,
// the DLL would be "ClientSideProviderAssembly.dll"

static class UIAutomationClientSideProviders


{
/// <summary>
/// Implementation of the static ClientSideProviderDescriptionTable
field.
/// In this case, only a single provider is listed in the table.
/// </summary>
public static ClientSideProviderDescription[]
ClientSideProviderDescriptionTable =
{
new ClientSideProviderDescription(
// Method that creates the provider object.
new
ClientSideProviderFactoryCallback(ConsoleProvider.Create),
// Class of window that will be served by the provider.
"ConsoleWindowClass")
};
}

class ConsoleProvider : IRawElementProviderSimple


{
IntPtr providerHwnd;

public ConsoleProvider(IntPtr hwnd)


{
providerHwnd = hwnd;
}

internal static IRawElementProviderSimple Create(


IntPtr hwnd, int idChild, int idObject)
{
// This provider doesn't expose children, so never expects
// nonzero values for idChild.
if (idChild != 0)
return null;
else
return new ConsoleProvider(hwnd);
}

private static IRawElementProviderSimple Create(


IntPtr hwnd, int idChild)
{
// Something is wrong if idChild is not 0.
if (idChild != 0) return null;
else return new ConsoleProvider(hwnd);
}

#region IRawElementProviderSimple

// This is a skeleton implementation. The only real functionality


// at this stage is to return the name of the element and the host
// window provider, which can supply other properties.

ProviderOptions IRawElementProviderSimple.ProviderOptions
{
get
{
return ProviderOptions.ClientSideProvider;
}
}

IRawElementProviderSimple
IRawElementProviderSimple.HostRawElementProvider
{
get
{
return
AutomationInteropProvider.HostProviderFromHandle(providerHwnd);
}
}

object IRawElementProviderSimple.GetPropertyValue(int propertyId)


{
if (propertyId == AutomationElementIdentifiers.NameProperty.Id)
return "Custom Console Window";
else
return null;
}

object IRawElementProviderSimple.GetPatternProvider(int iid)


{
return null;
}
#endregion IRawElementProviderSimple
}
}

Consulte también
Información general sobre proveedores de UI Automation
Registrar un ensamblado de proveedor de cliente
Implementar proveedores de UI
Automation en una aplicación cliente
Artículo • 09/05/2023

7 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.

Este tema contiene código de ejemplo que muestra cómo implementar un proveedor
de Automatización de la interfaz de usuario del lado cliente dentro de una aplicación.

Se trata de un escenario poco común. A menudo, una aplicación cliente de


Automatización de la interfaz de usuario utiliza proveedores del lado servidor o
proveedores del lado cliente que residen en un archivo DLL.

Ejemplo
El ejemplo de código siguiente implementa un proveedor simple para una ventana de
consola. El código no tiene ninguna funcionalidad práctica, pero está pensado para
mostrar los pasos básicos para configurar un proveedor dentro de código de cliente y
registrarlo mediante RegisterClientSideProviders.

C#

using System;
using System.Windows.Automation;
using System.Windows.Automation.Provider;
using System.Reflection;
using System.Runtime.InteropServices;
using System.IO;

namespace CSClientProviderImplementation
{
class CSClientSideImplementationProgram
{
[DllImport("kernel32.dll")]
static extern IntPtr GetConsoleWindow();

static void Main(string[] args)


{

ClientSettings.RegisterClientSideProviders(

UIAutomationClientSideProviders.ClientSideProviderDescriptionTable);

IntPtr hwnd = GetConsoleWindow();

// Get an AutomationElement that represents the window.


AutomationElement elementWindow =
AutomationElement.FromHandle(hwnd);
Console.WriteLine("Found UI Automation client-side provider
for:");

// The name property is furnished by the client-side provider.


Console.WriteLine(elementWindow.Current.Name);
Console.WriteLine();

Console.WriteLine("Press any key to exit.");


Console.ReadLine();
}
} // CSClientSideImplementationProgram class

class UIAutomationClientSideProviders
{
/// <summary>
/// Implementation of the static ClientSideProviderDescriptionTable
field.
/// In this case,only a single provider is listed in the table.
/// </summary>
public static ClientSideProviderDescription[]
ClientSideProviderDescriptionTable =
{ new ClientSideProviderDescription(
// Method that creates the provider object.
WindowProvider.Create,
// Class of window that will be served by the provider.
"ConsoleWindowClass") };
}

class WindowProvider : IRawElementProviderSimple


{
IntPtr providerHwnd;

public WindowProvider(IntPtr hwnd)


{
providerHwnd = hwnd;
}

internal static IRawElementProviderSimple Create(


IntPtr hwnd, int idChild, int idObject)
{
return Create(hwnd, idChild);
}

private static IRawElementProviderSimple Create(


IntPtr hwnd, int idChild)
{
// Something is wrong if idChild is not 0.
if (idChild != 0) return null;
else return new WindowProvider(hwnd);
}

#region IRawElementProviderSimple

// This is a skeleton implementation. The only real functionality at


this stage
// is to return the name of the element and the host window
provider, which can
// supply other properties.

ProviderOptions IRawElementProviderSimple.ProviderOptions
{
get
{
return ProviderOptions.ClientSideProvider;
}
}

IRawElementProviderSimple
IRawElementProviderSimple.HostRawElementProvider
{
get
{
return
AutomationInteropProvider.HostProviderFromHandle(providerHwnd);
}
}

object IRawElementProviderSimple.GetPropertyValue(int aid)


{
if (AutomationProperty.LookupById(aid) ==
AutomationElementIdentifiers.NameProperty)
{
return "Custom Console Window";
}
else
{
return null;
}
}

object IRawElementProviderSimple.GetPatternProvider(int iid)


{
return null;
}
#endregion IRawElementProviderSimple
}
}
Consulte también
Información general sobre proveedores de UI Automation
Registrar un ensamblado de proveedor de cliente
Crear un proveedor de UI Automation en el cliente
Implementación del proveedor de UI Automation en el cliente
Clientes de UI Automation para código
administrado
Artículo • 10/05/2023

7 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 sección contiene información general y temas de procedimientos que le ayudarán a


desarrollar clientes de Automatización de la interfaz de usuario.

En esta sección
Automatización de la interfaz de usuario y escalado de pantallaCompatibilidad de la
automatización de la interfaz de usuario con controles estándarAutomatización de la
interfaz de usuario para eventos de clientesAlmacenar en caché en los clientes de
automatización de la interfaz de usuarioPropiedades de automatización de la interfaz de
usuario para clientesAsignación de patrones de control para clientes de automatización
de la interfaz de usuario Patrones de control de Automatización de la interfaz de usuario
para clientesObtener elementos de automatización de la interfaz de usuario Problemas
de subproceso de Automatización de la interfaz de usuarioTemas paso a paso

Referencia
System.Windows.Automation
UI Automation y ajuste de escala de la
pantalla
Artículo • 09/05/2023

7 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.

A partir de Windows Vista, Windows permite a los usuarios cambiar la configuración de


puntos por pulgada (ppp) para que la mayoría de los elementos de la interfaz de
usuario (UI) en la pantalla aparezcan más grandes. Aunque esta característica ha estado
disponible desde hace mucho tiempo en Windows, en las versiones anteriores, el
escalado se tenía que implementar por las aplicaciones. A partir de Windows Vista, el
Administrador de ventanas de escritorio realiza el ajuste de escala predeterminado para
todas las aplicaciones que no controlan su propia escala. Las aplicaciones cliente de
automatización de la interfaz de usuario deben tener en cuenta esta característica.

Escalado en Windows Vista


La configuración de ppp predeterminada es 96, lo que significa que 96 píxeles ocupan el
ancho o el alto de una pulgada teórica. La medida exacta de una "pulgada" depende del
tamaño y de la resolución física del monitor. Por ejemplo, en un monitor de 12 pulgadas
de ancho, con una resolución horizontal de 1280 píxeles, una línea horizontal de 96
píxeles se amplía aproximadamente 9/10 de una pulgada.

Cambiar la configuración de ppp no es lo mismo que cambiar la resolución de pantalla.


Con el ajuste de escala ppp , el número de píxeles físicos de la pantalla sigue siendo el
mismo. Sin embargo, se aplica el ajuste de escala al tamaño y a la ubicación de los
elementos UI. Este ajuste de escala se puede realizar automáticamente mediante el
Administrador de ventanas de escritorio (DWM) para el escritorio y para las aplicaciones
que no solicitan explícitamente para cambiar de escala.

En efecto, cuando el usuario establece el factor de escala en 120 ppp, una pulgada
vertical u horizontal en la pantalla aumenta en un 25 por ciento. Todas las dimensiones
se escalan en consecuencia. El desplazamiento de una ventana de aplicación desde los
bordes superior e izquierdo de la pantalla aumenta en un 25 por ciento. Si el ajuste de
escala de aplicación está habilitado y la aplicación no es para ppp, el tamaño de la
ventana aumenta en la misma proporción, junto con los desplazamientos y los tamaños
de todos los elementos UI que contiene.

7 Nota

De forma predeterminada, el DWM no realiza el ajuste de escala para aplicaciones


que no son de ppp cuando el usuario establece ppp en 120, pero lo realiza cuando
ppp se establece en un valor personalizado de 144 o superior. Sin embargo, el
usuario puede invalidar el comportamiento predeterminado.

El escalado de pantalla crea nuevos desafíos para las aplicaciones a las que les preocupa
de cualquier manera las coordenadas de pantalla. La pantalla contiene ahora dos
sistemas de coordenadas: físico y lógico. Las coordenadas físicas de un punto son el
desplazamiento real en píxeles desde la parte superior izquierda del origen. Las
coordenadas lógicas son los desplazamientos de la manera que serían si se escalaran los
propios píxeles.

Supongamos que diseña un cuadro de diálogo con un botón en las coordenadas (100,
48). Cuando este cuadro de diálogo se muestre en el ppp 96 predeterminado, el botón
se encuentra en las coordenadas físicas (100, 48). En 120 ppp, se encuentra en las
coordenadas físicas (125, 60). Sin embargo, las coordenadas lógicas son las mismas en
cualquier configuración ppp: (100, 48).

Las coordenadas lógicas son importantes porque hacen que el comportamiento del
sistema operativo y las aplicaciones sea coherente independientemente de la
configuración de ppp. Por ejemplo, Cursor.Position normalmente devuelve las
coordenadas lógicas. Si mueve el cursor sobre un elemento en un cuadro de diálogo, se
devuelven las mismas coordenadas con independencia de la configuración ppp. Si
dibuja un control en (100, 100), se dibuja con esas coordenadas lógicas y ocupará la
misma posición relativa en cualquier configuración ppp.

Escalado en los clientes de automatización de


la interfaz de usuario
La API de UI Automation no usa coordenadas lógicas. Los siguientes métodos y
propiedades devuelven coordenadas físicas o las toman como parámetros.

GetClickablePoint
TryGetClickablePoint

ClickablePointProperty

FromPoint

BoundingRectangle

De manera predeterminada, una aplicación de cliente de automatización de la interfaz


de usuario que se está ejecutando en un entorno que no sea de 96 ppp no podrá
obtener resultados correctos de estos métodos y propiedades. Por ejemplo, dado que la
posición del cursor se encuentra en coordenadas lógicas, el cliente no podrá pasar
simplemente estas coordenadas a FromPoint para obtener el elemento que se
encuentra debajo del cursor. Además, la aplicación no podrá colocar correctamente
ventanas fuera de su área de cliente.

La solución consta de dos partes.

1. En primer lugar, haga que la aplicación cliente sea para ppp. Para ello, llame a la
función Win32 SetProcessDPIAware al inicio. En código administrado, la siguiente
declaración hace que esta función esté disponible.

C#

[System.Runtime.InteropServices.DllImport("user32.dll")]
internal static extern bool SetProcessDPIAware();

Esta función hace que todo el proceso sea para ppp, lo que significa que todas las
ventanas que pertenecen al proceso sean sin escala. En Highlighter Sample , por
ejemplo, las cuatro ventanas que componen el rectángulo resaltado se encuentran
en las coordenadas físicas obtenidas de UI Automation, y no en las coordenadas
lógicas. Si el ejemplo no era para ppp, el resaltado se dibujaría en las coordenadas
lógicas del escritorio, lo que daría lugar a una ubicación incorrecta en un entorno
que no sea de 96 ppp.

2. Para obtener las coordenadas del cursor, llame a la función Win32


GetPhysicalCursorPos . En el ejemplo siguiente se muestra cómo declarar y usar
esta función.

C#

public struct CursorPoint


{
public int X;
public int Y;
}

[System.Runtime.InteropServices.DllImport("user32.dll")]
internal static extern bool GetPhysicalCursorPos(ref CursorPoint
lpPoint);

private bool ShowUsage()


{
CursorPoint cursorPos = new CursorPoint();
try
{
return GetPhysicalCursorPos(ref cursorPos);
}
catch (EntryPointNotFoundException) // Not Windows Vista
{
return false;
}
}

U Precaución

No use Cursor.Position. El comportamiento de esta propiedad fuera de las


ventanas de cliente en un entorno de escala es indefinido.

Si su aplicación realiza una comunicación directa entre procesos con aplicaciones no


compatibles con ppp, es posible que tenga que convertir entre coordenadas lógicas y
físicas utilizando las funciones Win32 PhysicalToLogicalPoint y
LogicalToPhysicalPoint .

Consulte también
Highlighter Sample
Compatibilidad de UI Automation con
controles estándar
Artículo • 09/05/2023

7 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.

Este tema contiene información sobre la compatibilidad de Microsoft UI Automation


con los controles estándar en las aplicaciones desarrolladas para los marcos WPF, Win32
y Windows Forms.

Controles de Windows Presentation


Foundation
Todos los elementos de control de WPF que proporcionan información o soporte para la
interacción del usuario tienen soporte nativo completo para UI Automation. Otros
elementos, como los paneles, no son visibles para UI Automation.

Controles de Win32
La mayoría de los controles Win32 están expuestos a Microsoft UI Automation a través
de proveedores del lado del cliente en UIAutomationClientsideProviders.dll. Este
ensamblado se registra automáticamente para su uso con aplicaciones de cliente de
automatización de la interfaz de usuario.

La compatibilidad total solo se ofrece para los controles a partir de la versión 6 de


ComCtrl32.dll.

Se admiten los siguientes controles.

Nombre de la clase Tipo de control

Button Button
Nombre de la clase Tipo de control

Button RadioButton

Botón Group (Grupo)

Botón CheckBox

Botón Hyperlink

Botón SplitButton

Botón CheckBox

ComboBoxEx32 ComboBox

ComboBox ComboBox

Editar Documento

Editar Editar

SysLink Hyperlink

Estático Texto

Estático Imagen

SysIPAddress32 Personalizado

SysHeader32 Header/HeaderItem

SysListView32 DataGrid

SysListView32 List

ListBox List

ListBox ListItem

#32768 Menú

#32768 MenuItem

msctls_progress32 ProgressBar

RichEdit Documentar. Ver nota.

RichEdit20A Documento

RichEdit20W Documento

RichEdit50W Documento
Nombre de la clase Tipo de control

ScrollBar Control deslizante

msctls_trackbar32 Control deslizante

msctls_updown32 Spinner

msctls_statusbar32 StatusBar

SysTabControl32 Pestaña

SysTabControl32 TabItem

ToolbarWindow32 ToolBar

ToolbarWindow32 MenuItem

ToolbarWindow32 Botón

ToolbarWindow32 CheckBox

ToolbarWindow32 RadioButton

ToolbarWindow32 Separador

tooltips_class32 Información sobre herramientas

#32774 Información sobre herramientas

ReBarWindow32 Barra de herramientas

SysTreeView32 Árbol

SysTreeView32 TreeItem

Nota El control RichEdit es compatible solo con las versiones incluidas en Windows Vista
(en RichEd20.dll versión 3.1 y posterior, y MsftEdit.dll versión 4.1 y posterior).

No se admiten los siguientes controles.

Nombre de la clase Tipo de control

SysAnimate32 Imagen

SysPager Spinner

SysDateTimePick32 Personalizado

SysMonthCal32 Calendario

MS_WINNOTE Información sobre herramientas


Nombre de la clase Tipo de control

VBBubble Información sobre herramientas

ScrollBar (cuando se usa como control independiente) Control deslizante

SuperGrid Personalizado

Controles de Windows Forms


Los controles de Windows Forms están expuestos a Microsoft UI Automation a través de
proveedores del lado del cliente en UIAutomationClientsideProviders.dll. Este
ensamblado se registra automáticamente para su uso con aplicaciones de cliente de
automatización de la interfaz de usuario.

Normalmente, los controles de Windows Forms que son envoltorios gestionados para
los controles comunes de Win32 son compatibles con UI Automation. Se admiten los
siguientes controles.

Class Name (Nombre de clase)

Botón

CheckBox

CheckedListBox

ColorDialog

ComboBox

FolderBrowser

FontDialog

GroupBox

HScrollBar

ImageList

Etiqueta

ListBox

ListView

MainMenu/ContextMenu
Class Name (Nombre de clase)

MonthCalendar

NotifyIcon

OpenFileDialog

PageSetupDialog

PrintDialog

ProgressBar

RadioButton

RichTextBox

SaveFileDialog

ScrollableControl

SoundPlayer

StatusBar

TabControl/TabPage

TextBox

Temporizador

Barra de herramientas

Información sobre herramientas

Trackbar

TreeView

VscrollBar

WebBrowser

Los siguientes controles se exponen a Microsoft UI Automationsolo a través de su


compatibilidad con la accesibilidad activa de Microsoft. Es posible que algunas
funciones no estén disponibles.

Nombre del control

BindingSource
Nombre del control

DataGrid

DataGridView

DataNavigator

DomainUpDown

ErrorProvider

FlowLayoutPanel

Form

LinkLabel

HelpProvider

MaskedTextBox

MenuStrip/ContextMenuStrip

NumericUpDown

Lista de candidatos

PictureBox

PrintDocument

PrintPreview-Control

PrintPreview-Dialog

PropertyGrid

Control de usuario

ToolStrip

TableLayoutPanel

SplitContainer/SplitterPanel

Divisor

RaftingContainer

StatusStrip
Consulte también
Tipos de control de UI Automation
Eventos de UI Automation para clientes
Artículo • 09/05/2023

7 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.

Este tema describe cómo los eventos de Microsoft UI Automation son utilizados por los clientes de UI Automation.

UI Automation permite que los clientes se suscriban a eventos de interés. Esta capacidad mejora el rendimiento eliminando la
necesidad de sondear continuamente todos los elementos UI del sistema para ver si ha cambiado cualquier información, estructura
o estado.

La eficacia también mejora gracias a la capacidad para realizar escuchas de eventos que solo se encuentran dentro de un ámbito
definido. Por ejemplo, un cliente puede estar a la escucha de eventos de cambio de foco en todos los elementos UI Automation
del árbol o solo en un elemento y sus descendientes.

7 Nota

No dé por hecho que todos los eventos posibles los genera un proveedor de Microsoft UI Automation. Por ejemplo, no todos
los cambios de propiedades provocan la aparición de eventos por parte de los proveedores de proxy estándar para los
controles de Windows Forms y Win32.

Para obtener una vista más amplia de los eventos de Automatización de la interfaz de usuario, consulte información general sobre
eventos de UI Automation.

Suscripción a eventos
Las aplicaciones cliente se suscriben a eventos de un tipo determinado mediante el registro de un controlador de eventos, con uno
de los métodos siguientes.

Método Tipo de evento Tipo de argumentos de evento Tipo delegado

AddAutomationFocusChangedEventHandler Cambio de foco AutomationFocusChangedEventArgs AutomationFocusChangedEventHandler

AddAutomationPropertyChangedEventHandler Cambio de AutomationPropertyChangedEventArgs AutomationPropertyChangedEventHandler


propiedad

AddStructureChangedEventHandler Cambio de StructureChangedEventArgs StructureChangedEventHandler


estructura

AddAutomationEventHandler Todos los demás AutomationEventArgs o AutomationEventHandler


eventos, WindowClosedEventArgs
identificados por
un elemento
AutomationEvent

Antes de llamar al método, debe crear un método delegado para controlar el evento. Si lo prefiere, puede controlar tipos
diferentes de eventos en un solo método y pasar este método en varias llamadas a uno de los métodos de la tabla. Por ejemplo, es
posible configurar un único elemento AutomationEventHandler para controlar varios eventos de manera diferente, según el
elemento EventId.

7 Nota

Para procesar eventos de ventana cerrada, convierta el tipo de argumento que se pasa al controlador de eventos a
WindowClosedEventArgs. Como el elemento Microsoft UI Automation para la ventana ya no es válido, no puede utilizar el
parámetro sender para recuperar información; utilice GetRuntimeId en su lugar.
U Precaución

Si la aplicación podría recibir eventos de su propia UI, no utilice el subproceso UI de la aplicación para suscribirse a eventos o
para cancelar la suscripción. Si lo hace, podría provocar un comportamiento imprevisible. Para obtener más información,
consulta UI Automation Threading Issues.

Al apagar el equipo, o si los eventos UI Automation ya no son de interés para la aplicación, los clientes de UI Automation deben
llamar a uno de los métodos siguientes.

Método Descripción

RemoveAutomationEventHandler Anula el registro de un controlador de eventos que se registró mediante


AddAutomationEventHandler.

RemoveAutomationFocusChangedEventHandler Anula el registro de un controlador de eventos que se registró mediante


AddAutomationFocusChangedEventHandler.

RemoveAutomationPropertyChangedEventHandler Anula el registro de un controlador de eventos que se registró mediante


AddAutomationPropertyChangedEventHandler.

RemoveAllEventHandlers Anula el registro de todos los controladores de eventos registrados.

Para ver un código de ejemplo, consulte Suscribirse a los eventos de UI Automation.

Consulte también
Suscribirse a eventos de UI Automation
Información general sobre eventos de UI Automation
Información general acerca de las propiedades de UI Automation
TrackFocus Sample
Almacenar en caché en los clientes de
automatización de la interfaz de usuario
Artículo • 10/05/2023

7 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 presenta el almacenamiento en caché de los patrones de control y las


propiedades de automatización de la interfaz de usuario.

En automatización de la interfaz de usuario, almacenamiento en caché implica la captura


previa de datos. Así, es posible acceder a los datos sin necesidad de más comunicación
entre procesos. Normalmente, el almacenamiento en caché se utiliza en aplicaciones
cliente de Automatización de la interfaz de usuario para recuperar los patrones de
control y las propiedades de forma masiva. La información se recupera después desde la
caché según sea necesario. La aplicación actualiza periódicamente la caché,
normalmente en respuesta a eventos que indican que algo en la interfaz de usuario (UI)
ha cambiado.

Las ventajas del almacenamiento en caché se aprecian mejor con controles y controles
personalizados de Windows Presentation Foundation (WPF) que tengan proveedores de
Automatización de la interfaz de usuario de lado servidor. Las ventajas son menores si
se accede a proveedores de lado cliente, como los proveedores predeterminados de los
controles de Win32.

El almacenamiento en caché se produce cuando la aplicación activa un elemento


CacheRequest y después utiliza cualquier método o propiedad que devuelva un
elemento AutomationElement; por ejemplo, FindFirst, FindAll. Los métodos de la clase
TreeWalker son una excepción; el almacenamiento en caché solo se realiza si se
especifica un elemento CacheRequest como un parámetro (por ejemplo,
TreeWalker.GetFirstChild(AutomationElement, CacheRequest)).

El almacenamiento en caché también se produce al suscribirse a un evento mientras un


elemento CacheRequest está activo. El elemento AutomationElement que se pasa al
controlador de eventos como el origen de un evento contiene los patrones y las
propiedades almacenadas en caché que especifica el elemento CacheRequestoriginal.
Los cambios realizados en el elemento CacheRequest después de suscribirse al evento
no tienen ningún efecto.

Los patrones de control y las propiedades de la automatización de la interfaz de usuario


de un elemento pueden almacenarse en caché.

Opciones de almacenamiento en caché


CacheRequest especifica las siguientes opciones para el almacenamiento en caché.

Propiedades que se almacenarán en caché


Puede especificar las propiedades que se almacenarán en caché mediante una llamada a
Add(AutomationProperty) por cada propiedad antes de activar la solicitud.

Patrones de control que se almacenarán en caché


Puede especificar los patrones de control que se almacenarán en caché mediante una
llamada a Add(AutomationPattern) por cada patrón antes de activar la solicitud. Cuando
un patrón se almacena en caché, sus propiedades no se almacenan automáticamente;
debe especificar las propiedades que quiera que se almacenen en caché mediante
CacheRequest.Add.

Ámbito y filtrado del almacenamiento en caché


Puede especificar los elementos cuyos patrones y propiedades quiera almacenar en
caché mediante el establecimiento de la propiedad CacheRequest.TreeScope antes de
activar la solicitud. El ámbito es relativo a los elementos que se recuperan mientras la
solicitud está activa. Por ejemplo, si solo se define Childreny después se recupera un
elemento AutomationElement, los patrones y las propiedades de los elementos
secundarios de ese elemento se almacenan en caché, pero no sucede lo mismo con los
del propio elemento. Para garantizar que se realiza el almacenamiento en caché para el
propio elemento recuperado, debe incluir Element en la propiedad TreeScope . No es
posible establecer el ámbito en Parent o Ancestors. Sin embargo, es posible almacenar
en caché un elemento primario cuando se almacena un elemento secundario en caché;
consulte la sección Recuperación de elementos primarios y secundarios almacenados en
caché de este tema.

El alcance del almacenamiento en caché también se ve afectado por la propiedad


CacheRequest.TreeFilter . De forma predeterminada, el almacenamiento en caché se
realiza solo para los elementos que aparecen en la vista de control del árbol de la
automatización de la interfaz de usuario. Sin embargo, puede cambiar esta propiedad
para aplicar el almacenamiento en caché a todos los elementos o solo a los que
aparecen en la vista de contenido.

Solidez de las referencias de elemento


De forma predeterminada, cuando se recupera un elemento AutomationElement, se
tiene acceso a todas las propiedades y los patrones de ese elemento, incluidos los que
no se almacenaron en caché. Sin embargo, para obtener una mayor eficacia, puede
especificar que la referencia al elemento solo haga referencia a los datos almacenados
en caché si establece la propiedad AutomationElementMode del elemento
CacheRequest en None. En este caso, no tiene acceso a los patrones y propiedades no
almacenados en caché de los elementos recuperados. Esto significa que no se puede
acceder a las propiedades a través de GetCurrentPropertyValue o la propiedad Current
de AutomationElement , ni con ningún patrón de control; tampoco se puede recuperar
un patrón mediante GetCurrentPattern o TryGetCurrentPattern. En los patrones
almacenados en caché, puede llamar a métodos que recuperen propiedades de matriz,
como SelectionPattern.SelectionPatternInformation.GetSelection, pero no puede llamar
a ninguno que realice acciones en el control, como InvokePattern.Invoke.

Un ejemplo de una aplicación que podría no necesitar referencias completas a objetos


es un lector de pantalla, que capturaría previamente las propiedades Name y
ControlType de los elementos de una ventana, pero no necesitaría los propios objetos
AutomationElement .

Activación de CacheRequest
El almacenamiento en caché solo se realiza cuando se recuperan los objetos
AutomationElement mientras un elemento CacheRequest está activo para el subproceso
actual. Hay dos formas de activar un elemento CacheRequest.

La manera habitual es llamar a Activate. Este método devuelve un objeto que


implementa IDisposable. La solicitud permanecerá activa mientras exista el objeto
IDisposable . La manera más fácil de controlar la duración del objeto es incluir la
llamada dentro de un bloque using (C#) o Using (Visual Basic). Esto garantiza que la
solicitud se extraerá de la pila, aunque se produzca una excepción.

Otra forma, que resulta útil cuando se quieren anidar solicitudes de almacenamiento en
caché, es llamar a Push. Esto coloca la solicitud en una pila y la activa. La solicitud
permanece activa hasta que se quita de la pila mediante Pop. La solicitud pasa a estar
temporalmente inactiva si se inserta otra solicitud en la pila; solo la solicitud superior de
la pila está activa.

Recuperación de propiedades almacenadas en


caché
Puede recuperar las propiedades almacenadas en caché de un elemento mediante los
siguientes métodos y propiedades.

GetCachedPropertyValue

Cached

Se produce una excepción si la propiedad solicitada no está en la caché.

Cached, como Current, expone propiedades individuales como miembros de una


estructura. Sin embargo, no es necesario recuperar esta estructura; puede acceder a las
propiedades individuales directamente. Por ejemplo, la propiedad Name se puede
obtener de element.Cached.Name , donde element es un elemento AutomationElement.

Recuperación de patrones de control


almacenados en caché
Puede recuperar los patrones de control almacenados en caché de un elemento
mediante los siguientes métodos.

GetCachedPattern

TryGetCachedPattern

Si el patrón no está almacenado en caché, GetCachedPattern produce una excepción y


TryGetCachedPattern devuelve false .

Puede recuperar las propiedades almacenadas en caché de un patrón de control


mediante la propiedad Cached del objeto de patrón. También puede recuperar los
valores actuales mediante la propiedad Current , pero solo si no se especificó None
cuando se recuperó AutomationElement . (Full es el valor predeterminado y permite el
acceso a los valores actuales).
Recuperación de elementos primarios y
secundarios almacenados en caché
Cuando se recupera un elemento AutomationElement y se solicita almacenamiento en
caché para los elementos secundarios de ese elemento mediante la propiedad
TreeScope de la solicitud, es posible obtener posteriormente los elementos secundarios
desde la propiedad CachedChildren del elemento que recuperó.

Si Element se incluyó en el ámbito de la solicitud de caché, el elemento raíz de la


solicitud estará posteriormente disponible desde la propiedad CachedParent de
cualquiera de los elementos secundarios.

7 Nota

No se pueden almacenar en caché los elementos primarios o antecesores del


elemento raíz de la solicitud.

Actualización de la caché
La caché solo es válida siempre y cuando no cambie nada en la interfaz de usuario. La
aplicación es responsable de actualizar la caché, normalmente como respuesta a
eventos.

Si se suscribe a un evento mientras un elemento CacheRequest está activo, obtendrá un


elemento AutomationElement con una caché actualizada como origen del evento cada
vez que se llame a su delegado de controlador de eventos. También puede actualizar la
información almacenada en caché de un elemento con una llamada a
GetUpdatedCache. Puede pasar el elemento CacheRequest original para actualizar toda
la información que se almacenó previamente en caché.

La actualización de la caché no modifica las propiedades de las referencias


AutomationElement existentes.

Consulte también
Eventos de UI Automation para clientes
Utilizar el almacenamiento en caché en la UI Automation
Ejemplo de FetchTimer
Propiedades de UI Automation para
clientes
Artículo • 10/05/2023

7 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:

FindFirst

FindAll

Condition

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:
GetCachedPropertyValue

GetCurrentPropertyValue

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.

C#

// elementList is an AutomationElement.

// The following two calls are equivalent.


string name = elementList.Current.Name;
name = elementList.GetCurrentPropertyValue(AutomationElement.NameProperty)
as string;

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.

C#

// 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.CanSelectMultipleProper
ty);

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.

C#

// elementList is an AutomationElement.
object help =
elementList.GetCurrentPropertyValue(AutomationElement.HelpTextProperty,
true);
if (help == AutomationElement.NotSupported)
{
help = "No help available";
}
string helpText = (string)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
Almacenar en caché en los clientes de automatización de la interfaz de usuario
Implementación del proveedor de UI Automation en el servidor
Suscribirse a eventos de UI Automation
Asignación de patrones de controles
para clientes de UI Automation
Artículo • 10/05/2023

7 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 muestran los tipos de control y sus patrones de control asociados.

En la siguiente tabla se organizan los patrones de control en las siguientes categorías:

Compatible. El control debe admitir este patrón de control.

Compatibilidad condicional. El control puede admitir este patrón de control según


el estado del control.

No compatible. El control no admite este patrón de control; los controles


personalizados pueden admitir este patrón de control.

7 Nota

Algunos controles tienen compatibilidad condicional con varios patrones de


control, en función de la funcionalidad del control. Por ejemplo, el control de
elemento de menú tiene compatibilidad condicional con el patrón de control
InvokePattern, ExpandCollapsePattern, TogglePatterno SelectionItemPattern , en
función de su función en el control de menú.

Patrones de controles de UI Automation para


clientes
Tipo de Compatible Compatibilidad condicional No
control compatible

Botón None Invoke, Toggle, Expand Collapse None


Tipo de Compatible Compatibilidad condicional No
control compatible

Calendario Grid, Table Selection, Scroll Valor

Casilla Alternancia None None

Cuadro Expandir o contraer Selection, Value Scroll


combinado

Cuadrícula Cuadrícula Scroll, Selection, Table None


de datos

Data Item Selection Item Expand Collapse, Grid Item, Scroll Item, None
Table, Toggle, Value

Documento Texto Scroll, Value None

Editar None Text, Range Value, Value None

Group None Expandir o contraer None


(Grupo)

Encabezado None Transformación None

Header Item None Transform, Invoke None

Hyperlink Invocar Value Ninguno

Imagen None Grid Item, Table Item Invoke,


Selection Item

List None Grid, Multiple View, Scroll, Selection Tabla

List Item Selection Item Expand Collapse, Grid Item, Invoke, Scroll None
Item, Toggle, Value

Menú None None None

Barra de None Expand Collapse, Dock, Transform None


menús

Elemento de None Expand Collapse, Invoke, Selection Item, None


menú Toggle

Panel None Dock Scroll, Transform Periodo

ProgressBar None Range Value, Value None

Radio Selection Item None Alternancia


Button

Scroll Bar None RangeValue Scroll


Tipo de Compatible Compatibilidad condicional No
control compatible

Separador None None None

Control None Range Value, Selection, Value None


deslizante

Spinner None Range Value, Selection, Value None

Botón de Invoke, Expand None None


expansión Collapse

Barra de None Cuadrícula None


estado

Pestaña Número de selección Scroll None

Tab Item Selection Item None Invocar

Tabla Grid, Grid Item, Table, None None


Table Item

Texto None Grid Item, Table Item, Text Valor

Thumb Transformación None None

Barra de None None None


título

Tool Bar None Dock, Expand Collapse, Transform None

Tool Tip None Text, Window None

Árbol None Scroll, Selection None

Tree Item Expandir o contraer Invoke, Scroll Item, Selection Item, None
Toggle

Periodo Transform, Window Acoplar None

7 Nota

Si un tipo de control no muestra patrones de control compatibles enumerados


pero tiene uno o más patrones de control que admitidos condicionalmente, se
admitirá en todo momento uno de esos patrones de control condicionales.

Vea también
Información general sobre UI Automation
Patrones de controles de UI Automation
para clientes
Artículo • 10/05/2023

7 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.

Este tema es una introducción a los patrones de control para clientes de automatización
de la interfaz de usuario. Incluye información que explica cómo un cliente de
automatización de la interfaz de usuario puede usar los patrones de control para tener
acceso a la información sobre la interfaz de usuario.

Los patrones de control proporcionan una manera de categorizar y exponer la


funcionalidad de un control independientemente de su tipo o apariencia. Los clientes de
automatización de la interfaz de usuario pueden examinar un AutomationElement para
determinar qué patrones de control son compatibles y estar seguros del
comportamiento del control.

Para obtener una lista completa de los patrones de control, vea UI Automation Control
Patterns Overview.

Obtener patrones de control


Los clientes recuperan un patrón de control de un AutomationElement mediante una
llamada a AutomationElement.GetCachedPattern o
AutomationElement.GetCurrentPattern.

Los clientes pueden usar el método GetSupportedPatterns o una propiedad


IsPatternAvailable individual (por ejemplo, IsTextPatternAvailableProperty) para
determinar si se admite un patrón o un grupo de patrones en el AutomationElement.
Sin embargo, resulta más eficaz intentar obtener el patrón de control y comprobar si
hay una referencia null que comprobar las propiedades compatibles y recuperar el
patrón de control, ya que se generan menos llamadas entre procesos.
En el siguiente ejemplo se muestra cómo obtener un patrón de control TextPattern de
un AutomationElement.

C#

// Specify the control type we're looking for, in this case 'Document'
PropertyCondition cond = new
PropertyCondition(AutomationElement.ControlTypeProperty,
ControlType.Document);

// target --> The root AutomationElement.


AutomationElement textProvider = target.FindFirst(TreeScope.Descendants,
cond);

targetTextPattern = textProvider.GetCurrentPattern(TextPattern.Pattern) as
TextPattern;

if (targetTextPattern == null)
{
Console.WriteLine("Root element does not contain a descendant that
supports TextPattern.");
return;
}

Recuperar propiedades en patrones de control


Para recuperar los valores de propiedad en los patrones de control, los clientes pueden
llamar a AutomationElement.GetCachedPropertyValue o
AutomationElement.GetCurrentPropertyValue y convertir el objeto devuelto al tipo
apropiado. Para más información sobre las propiedades de automatización de la interfaz
de usuario, vea Propiedades de Automatización de la interfaz de usuario Properties for
clients.

Además de los métodos GetPropertyValue , los valores de propiedad se pueden


recuperar mediante los descriptores de acceso de Common Language Runtime (CLR)
para acceder a las propiedades de automatización de la interfaz de usuario en un
patrón.

Controles con patrones variables


Algunos tipos de controles admiten patrones diferentes en función de su estado o de la
manera en la que se usan. Algunos ejemplos de controles que pueden tener patrones
variables son las vistas de lista (miniaturas, mosaicos, iconos, lista, detalles), los gráficos
de Microsoft Excel (circulares, de líneas, de barras, valores de celda con fórmulas), el
área de documento de Microsoft Word (Normal, Diseño Web, Esquema, Diseño de
impresión, Vista previa de impresión) y las máscaras de Media Player de Microsoft
Windows.

Los controles que implementan tipos de controles personalizados pueden tener


cualquier conjunto de patrones de control que sea necesario para representar su
funcionalidad.

Consulte también
Patrones de control de UI Automation
Modelo de texto de UI Automation
Llamar a un control utilizando la UI Automation
Obtener el estado de alternancia de una casilla mediante UI Automation
Asignación de patrones de controles para clientes de UI Automation
Introduzca un ejemplo de texto de TextPattern
Ejemplo de búsqueda y selección de TextPattern
Ejemplo de InvokePattern, ExpandCollapsePattern, y TogglePattern
Obtener elementos de UI Automation
Artículo • 10/05/2023

7 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.

Este tema describe las distintas formas de obtener objetos AutomationElement para los
elementos de la interfaz de usuario (UI).

U Precaución

Si la aplicación cliente intenta buscar elementos en su propia interfaz de usuario,


debe realizar todos las llamadas a UI Automation en un subproceso independiente.
Para obtener más información, consulta UI Automation Threading Issues.

Elemento raíz
Todas las búsquedas de objetos AutomationElement deben tener un punto de inicio.
Puede ser cualquier elemento, incluidos el escritorio, una ventana de aplicación o un
control.

El elemento raíz para el escritorio, del que descienden todos los elementos, se obtiene
de la propiedad estática AutomationElement.RootElement .

U Precaución

En general, debe intentar obtener solo elementos secundarios directos del


elemento RootElement. Una búsqueda de descendientes puede iterar a través de
cientos o incluso miles de elementos, lo que posiblemente provocaría un
desbordamiento de pila. Si intenta obtener un elemento concreto en un nivel
inferior, debe iniciar la búsqueda desde la ventana de aplicación o desde un
contenedor en un nivel inferior.
Condiciones
Para la mayoría de técnicas que puede usar para recuperar elementos UI Automation,
debe especificar un elemento Condition, que es un conjunto de criterios que definen los
elementos que quiere recuperar.

La condición más simple es TrueCondition, un objeto predefinido que especifica que se


devolverán todos los elementos dentro del ámbito de búsqueda. FalseCondition, que es
el elemento opuesto de TrueCondition, no es tan útil, ya que impediría que se
encontraran elementos.

Hay otras tres condiciones predefinidas que se pueden utilizar por sí solas o en
combinación con otras condiciones: ContentViewCondition, ControlViewConditiony
RawViewCondition. RawViewCondition, por sí sola, equivale a TrueCondition, porque no
filtra los elementos por sus propiedades IsControlElement o IsContentElement .

Otras condiciones se componen de uno o varios objetos PropertyCondition , cada uno


de los cuales especifica un valor de propiedad. Por ejemplo, un elemento
PropertyCondition podría especificar que el elemento está habilitado o que admite un
patrón de control determinado.

Las condiciones se pueden combinar con lógica booleana, mediante la construcción de


objetos de tipos AndCondition, OrConditiony NotCondition.

Ámbito de búsqueda
Las búsquedas realizadas con FindFirst o FindAll deben tener un ámbito así como un
punto de inicio.

El ámbito define el espacio alrededor del punto de inicio en el que se va a buscar. Esto
podría incluir el propio elemento, sus elementos relacionados, su elemento primario, sus
antecesores, sus elementos secundarios inmediatos y sus descendientes.

El ámbito de una búsqueda se define mediante una combinación bit a bit de valores de
la enumeración TreeScope .

Búsqueda de un elemento conocido


Para buscar un elemento conocido, identificado por su Name, AutomationIdo alguna
otra propiedad o combinación de propiedades, lo más fácil es utilizar el método
FindFirst . Si el elemento que se busca es una ventana de aplicación, el punto inicial de
la búsqueda puede ser el elemento RootElement.
Esta forma de buscar elementos UI Automation es especialmente útil en escenarios de
pruebas automatizadas.

Búsqueda de elementos en un subárbol


Para encontrar todos los elementos que cumplan criterios concretos relacionados con
un elemento conocido, puede utilizar FindAll. Por ejemplo, podría utilizar este método
para recuperar elementos de lista o elementos de menú de una lista o un menú, o para
identificar todos los controles de un cuadro de diálogo.

Recorrer un subárbol
Si no tiene conocimiento previo de las aplicaciones con las que se puede usar el cliente,
puede construir un subárbol de todos los elementos de interés con la clase TreeWalker .
La aplicación podría hacer esto en respuesta a un evento de cambio de foco; es decir,
cuando una aplicación o un control recibe el foco de entrada, el cliente de
Automatización de la interfaz de usuario examina los elementos secundarios y quizás
todos los descendientes del elemento en el que está el foco.

Otra forma en que se puede utilizar TreeWalker es para identificar los antecesores de un
elemento. Por ejemplo, al recorrer el árbol en sentido ascendente, se puede identificar la
ventana primaria de un control.

Puede usar TreeWalker mediante la creación de un objeto de la clase (definiendo los


elementos de interés pasando un elemento Condition) o mediante uno de los siguientes
objetos predefinidos que se definen como campos de TreeWalker.

Campo Descripción

ContentViewWalker Busca únicamente los elementos cuya propiedad IsContentElement sea


true .

ControlViewWalker Busca únicamente los elementos cuya propiedad IsControlElement sea


true .

RawViewWalker Busca todos los elementos.

Después de haber obtenido un elemento TreeWalker, su uso es sencillo. Basta con


llamar a los métodos Get para navegar entre elementos del subárbol.

El método Normalize puede utilizarse para desplazarse a un elemento del subárbol


desde otro elemento que no forma parte de la vista. Por ejemplo, suponga que ha
creado una vista de un subárbol mediante ContentViewWalker. Después, la aplicación
recibe la notificación de que una barra de desplazamiento ha recibido el foco de
entrada. Como una barra de desplazamiento no es un elemento de contenido, no está
presente en la vista del subárbol. Sin embargo, puede pasar el elemento
AutomationElement que representa la barra de desplazamiento a Normalize y recuperar
el antecesor más cercano que se encuentra en la vista de contenido.

Otras maneras de recuperar un elemento


Además de las búsquedas y la navegación, puede recuperar un elemento
AutomationElement de las maneras siguientes.

Desde un evento
Cuando la aplicación recibe un evento UI Automation , el objeto de origen que se pasa
al controlador de eventos es un elemento AutomationElement. Por ejemplo, si se ha
suscrito a eventos de cambio de foco, el origen que se pasó a su
AutomationFocusChangedEventHandler es el elemento que recibió el foco.

Para obtener más información, consulta Subscribe to UI Automation Events.

Desde un punto
Si tiene coordenadas de pantalla (por ejemplo, una posición del cursor), puede
recuperar un elemento AutomationElement con el método estático FromPoint .

Desde un identificador de ventana


Para recuperar un elemento AutomationElement desde un HWND, use el método
estático FromHandle .

Desde el control con el foco


Puede recuperar un elemento AutomationElement que representa el control con el foco
desde la propiedad estática FocusedElement .

Consulte también
Búsqueda de un elemento de Automatización de la interfaz de usuario basada en
una condición de propiedad
Navegar entre elementos de UI Automation con TreeWalker
Información general sobre el árbol de la UI Automation
Aspectos relacionados con subprocesos
de la UI Automation
Artículo • 10/05/2023

7 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.

Debido a la forma en que Microsoft UI Automation utiliza los mensajes de Windows,


pueden producirse conflictos cuando una aplicación cliente intenta interactuar con su
propia UI en el subproceso de interfaz de usuario. Estos conflictos pueden dar lugar a
un rendimiento muy lento o incluso provocar que la aplicación deje de responder.

Si la aplicación cliente está diseñada para interactuar con todos los elementos del
escritorio, incluida su propia UI, debe realizar todas las llamadas a UI Automation en un
subproceso independiente. Esto incluye la ubicación de elementos (por ejemplo,
mediante el método TreeWalker o FindAll ) y el uso de patrones de control.

Es seguro realizar llamadas a UI Automation dentro de un controlador de eventos de UI


Automation, porque siempre se llama al controlador de eventos en un subproceso no
de interfaz de usuario. No obstante, al suscribirse a eventos que pueden provenir de la
UI de la aplicación cliente, debe realizar la llamada a AddAutomationEventHandler, o a
un método relacionado, en un subproceso no de interfaz de usuario. Quite los
controladores de eventos que estén en el mismo subproceso.
Temas "Cómo..." sobre clientes de UI
Automation para código administrado
Artículo • 09/05/2023

7 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 esta sección se proporciona información detallada sobre la implementación de


características de Microsoft Automatización de la interfaz de usuario en una aplicación
cliente.

En esta sección
Buscar un elemento Automatización de la interfaz de usuario basado en una condición
de propiedadNavegar entre elementos Automatización de la interfaz de usuario con
TreeWalkerBuscar un elemento Automatización de la interfaz de usuario para un
elemento de lista Obtener Automatización de la interfaz de usuario propiedades de
elementousar el almacenamiento en caché en Automatización de la interfaz de
usuarioSubscribe para Automatización de la interfaz de usuario eventosregistrar un
ensamblado de proveedor de Client-SideUsar la propiedad AutomationID
Buscar un elemento de UI Automation
basándose en una condición de
propiedad
Artículo • 09/05/2023

7 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.

Este artículo contiene código de ejemplo que muestra cómo buscar un elemento dentro
del árbol de automatización de la interfaz de usuario según una propiedad o
propiedades específicas.

Ejemplo
En el ejemplo siguiente, se especifica un conjunto de condiciones de propiedad que
identifican un determinado elemento (o elementos) de interés en el árbol
AutomationElement. A continuación, se realiza una búsqueda de todos los elementos
coincidentes con el método FindAll que incorpora una serie de operaciones booleanas
AndCondition para limitar el número de elementos coincidentes.

7 Nota

Al buscar desde RootElement, debe intentar obtener solo elementos secundarios


directos. Una búsqueda de descendientes puede recorrer en iteración cientos o
incluso miles de elementos, lo que posiblemente provocaría un desbordamiento de
pila. Si intenta obtener un elemento concreto en un nivel inferior, debe iniciar la
búsqueda desde la ventana de aplicación o desde un contenedor en un nivel
inferior.

C#

///--------------------------------------------------------------------
/// <summary>
/// Walks the UI Automation tree of the target and reports the control
/// type of each element it finds in the control view to the client.
/// </summary>
/// <param name="targetTreeViewElement">
/// The root of the search on this iteration.
/// </param>
/// <param name="elementIndex">
/// The TreeView index for this iteration.
/// </param>
/// <remarks>
/// This is a recursive function that maps out the structure of the
/// subtree of the target beginning at the AutomationElement passed in
/// as the rootElement on the first call. This could be, for example,
/// an application window.
/// CAUTION: Do not pass in AutomationElement.RootElement. Attempting
/// to map out the entire subtree of the desktop could take a very
/// long time and even lead to a stack overflow.
/// </remarks>
///--------------------------------------------------------------------
private void FindTreeViewDescendants(
AutomationElement targetTreeViewElement, int treeviewIndex)
{
if (targetTreeViewElement == null)
return;

AutomationElement elementNode =
TreeWalker.ControlViewWalker.GetFirstChild(targetTreeViewElement);

while (elementNode != null)


{
Label elementInfo = new Label();
elementInfo.Margin = new Thickness(0);
clientTreeViews[treeviewIndex].Children.Add(elementInfo);

// Compile information about the control.


elementInfoCompile = new StringBuilder();
string controlName =
(elementNode.Current.Name == "") ?
"Unnamed control" : elementNode.Current.Name;
string autoIdName =
(elementNode.Current.AutomationId == "") ?
"No AutomationID" : elementNode.Current.AutomationId;

elementInfoCompile.Append(controlName)
.Append(" (")
.Append(elementNode.Current.ControlType.LocalizedControlType)
.Append(" - ")
.Append(autoIdName)
.Append(")");

// Test for the control patterns of interest for this sample.


object objPattern;
ExpandCollapsePattern expcolPattern;
if (true ==
elementNode.TryGetCurrentPattern(ExpandCollapsePattern.Pattern, out
objPattern))
{
expcolPattern = objPattern as ExpandCollapsePattern;
if (expcolPattern.Current.ExpandCollapseState !=
ExpandCollapseState.LeafNode)
{
Button expcolButton = new Button();
expcolButton.Margin = new Thickness(0, 0, 0, 5);
expcolButton.Height = 20;
expcolButton.Width = 100;
expcolButton.Content = "ExpandCollapse";
expcolButton.Tag = expcolPattern;
expcolButton.Click +=
new RoutedEventHandler(ExpandCollapse_Click);
clientTreeViews[treeviewIndex].Children.Add(expcolButton);
}
}
TogglePattern togPattern;
if (true == elementNode.TryGetCurrentPattern(TogglePattern.Pattern,
out objPattern))
{
togPattern = objPattern as TogglePattern;
Button togButton = new Button();
togButton.Margin = new Thickness(0, 0, 0, 5);
togButton.Height = 20;
togButton.Width = 100;
togButton.Content = "Toggle";
togButton.Tag = togPattern;
togButton.Click += new RoutedEventHandler(Toggle_Click);
clientTreeViews[treeviewIndex].Children.Add(togButton);
}
InvokePattern invPattern;
if (true == elementNode.TryGetCurrentPattern(InvokePattern.Pattern,
out objPattern))
{
invPattern = objPattern as InvokePattern;
Button invButton = new Button();
invButton.Margin = new Thickness(0);
invButton.Height = 20;
invButton.Width = 100;
invButton.Content = "Invoke";
invButton.Tag = invPattern;
invButton.Click += new RoutedEventHandler(Invoke_Click);
clientTreeViews[treeviewIndex].Children.Add(invButton);
}
// Display compiled information about the control.
elementInfo.Content = elementInfoCompile;
Separator sep = new Separator();
clientTreeViews[treeviewIndex].Children.Add(sep);

// Iterate to next element.


// elementNode - Current element.
// treeviewIndex - Index of parent TreeView.
FindTreeViewDescendants(elementNode, treeviewIndex);
elementNode =
TreeWalker.ControlViewWalker.GetNextSibling(elementNode);
}
}

Consulte también
Ejemplo de elemento de menú InvokePattern y ExpandCollapsePattern
Obtener elementos de UI Automation
Utilizar la propiedad AutomationID
Navegar entre elementos de UI
Automation con TreeWalker
Artículo • 10/05/2023

7 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.

Este tema contiene código de ejemplo que muestra cómo navegar entre los elementos
de Microsoft Automatización de la interfaz de usuario mediante la clase TreeWalker.

Ejemplo 1
En el ejemplo siguiente se usa GetParent para recorrer el árbol de Microsoft
Automatización de la interfaz de usuario hasta que encuentre el elemento raíz o el
escritorio. Elemento justo debajo que es la ventana primaria del elemento especificado.

C#

/// <summary>
/// Retrieves the top-level window that contains the specified UI Automation
element.
/// </summary>
/// <param name="element">The contained element.</param>
/// <returns>The containing top-level window element.</returns>
private AutomationElement GetTopLevelWindow(AutomationElement element)
{
TreeWalker walker = TreeWalker.ControlViewWalker;
AutomationElement elementParent;
AutomationElement node = element;
if (node == elementRoot) return node;
do
{
elementParent = walker.GetParent(node);
if (elementParent == AutomationElement.RootElement) break;
node = elementParent;
}
while (true);
return node;
}
Ejemplo 2
En el ejemplo siguiente se usa GetFirstChild y GetNextSibling para crear un
objetoTreeView que muestra un subárbol completo de Microsoft Automatización de la
interfaz de usuario elementos que están en la vista de control y que están habilitados.

C#

/// <summary>
/// Walks the UI Automation tree and adds the control type of each enabled
control
/// element it finds to a TreeView.
/// </summary>
/// <param name="rootElement">The root of the search on this iteration.
</param>
/// <param name="treeNode">The node in the TreeView for this iteration.
</param>
/// <remarks>
/// This is a recursive function that maps out the structure of the subtree
beginning at the
/// UI Automation element passed in as rootElement on the first call. This
could be, for example,
/// an application window.
/// CAUTION: Do not pass in AutomationElement.RootElement. Attempting to map
out the entire subtree of
/// the desktop could take a very long time and even lead to a stack
overflow.
/// </remarks>
private void WalkEnabledElements(AutomationElement rootElement, TreeNode
treeNode)
{
Condition condition1 = new
PropertyCondition(AutomationElement.IsControlElementProperty, true);
Condition condition2 = new
PropertyCondition(AutomationElement.IsEnabledProperty, true);
TreeWalker walker = new TreeWalker(new AndCondition(condition1,
condition2));
AutomationElement elementNode = walker.GetFirstChild(rootElement);
while (elementNode != null)
{
TreeNode childTreeNode =
treeNode.Nodes.Add(elementNode.Current.ControlType.LocalizedControlType);
WalkEnabledElements(elementNode, childTreeNode);
elementNode = walker.GetNextSibling(elementNode);
}
}

Consulte también
Obtener elementos de UI Automation
Buscar un elemento de UI Automation
para un elemento de lista
Artículo • 09/05/2023

7 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 recuperar un AutomationElement para un elemento


dentro de una lista cuando se conoce el índice del elemento.

Ejemplo
En el ejemplo siguiente se muestran dos maneras de recuperar un elemento
especificado de una lista, uno mediante TreeWalker y el otro mediante FindAll.

La primera técnica tiende a ser más rápida para los controles Win32, pero el segundo es
más rápido para los controles de Windows Presentation Foundation (WPF).

C#

/// <summary>
/// Retrieves an element in a list, using TreeWalker.
/// </summary>
/// <param name="parent">The list element.</param>
/// <param name="index">The index of the element to find.</param>
/// <returns>The list item.</returns>
AutomationElement FindChildAt(AutomationElement parent, int index)
{
if (index < 0)
{
throw new ArgumentOutOfRangeException();
}
TreeWalker walker = TreeWalker.ControlViewWalker;
AutomationElement child = walker.GetFirstChild(parent);
for (int x = 1; x <= index; x++)
{
child = walker.GetNextSibling(child);
if (child == null)
{
throw new ArgumentOutOfRangeException();
}
}
return child;
}

/// <summary>
/// Retrieves an element in a list, using FindAll.
/// </summary>
/// <param name="parent">The list element.</param>
/// <param name="index">The index of the element to find.</param>
/// <returns>The list item.</returns>
AutomationElement FindChildAtB(AutomationElement parent, int index)
{
Condition findCondition = new
PropertyCondition(AutomationElement.IsControlElementProperty, true);
AutomationElementCollection found = parent.FindAll(TreeScope.Children,
findCondition);
if ((index < 0) || (index >= found.Count))
{
throw new ArgumentOutOfRangeException();
}
return found[index];
}

Consulte también
Obtener elementos de UI Automation
Obtener propiedades del elemento de la
UI Automation
Artículo • 09/05/2023

7 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 recuperar propiedades de un elemento de


automatización de la interfaz de usuario.

Obtenga valor actual de la propiedad


1. Obtenga la propiedad AutomationElement que desea obtener.

2. Llame a GetCurrentPropertyValue o recupere la estructura de propiedades Current


y obtenga el valor de uno de sus miembros.

Obtener un valor de propiedad almacenado en caché


1. Obtenga la propiedad AutomationElement que desea obtener. La propiedad debe
haberse especificado en CacheRequest.

2. Llame a GetCachedPropertyValueo recupere la estructura de propiedades Cached y


obtenga el valor de uno de sus miembros.

Ejemplo
En el ejemplo siguiente se muestran varias maneras de recuperar las propiedades
actuales de AutomationElement.

C#

void PropertyCallsExample(AutomationElement elementList)


{
// The following two calls are equivalent.
string name = elementList.Current.Name;
name =
elementList.GetCurrentPropertyValue(AutomationElement.NameProperty) as
string;

// The following shows how to ignore the default property, which


// would probably be an empty string if the property is not supported.
// Passing "false" as the second parameter is equivalent to using the
overload
// that does not have this parameter.
object help =
elementList.GetCurrentPropertyValue(AutomationElement.HelpTextProperty,
true);
if (help == AutomationElement.NotSupported)
{
help = "No help available";
}
string helpText = (string)help;
}

Consulte también
Propiedades de UI Automation para clientes
Utilizar el almacenamiento en caché en la UI Automation
Almacenar en caché en los clientes de automatización de la interfaz de usuario
Utilizar el almacenamiento en caché en
la UI Automation
Artículo • 10/05/2023

7 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 esta sección se muestra cómo implementar el almacenamiento en caché de patrones


de control y propiedades de AutomationElement .

Activar una solicitud de almacenamiento en


caché
1. Crear un control CacheRequest.

2. Especifique las propiedades y los patrones que se almacenarán en caché mediante


el uso de Add.

3. Especifique el ámbito del almacenamiento en caché estableciendo la propiedad


TreeScope .

4. Especifique la vista del subárbol estableciendo la propiedad TreeFilter .

5. Establezca la propiedad AutomationElementMode en None si quiere aumentar la


eficacia sin recuperar una referencia completa a objetos. (Esto hará que no sea
posible recuperar los valores actuales de esos objetos).

6. Active la solicitud mediante el uso de Activatedentro de un bloque using ( Using


en Microsoft Visual Basic .NET).

Después de obtener objetos AutomationElement o de suscribirse a eventos, desactive la


solicitud mediante Pop (si se usó Push ) o eliminando el objeto creado por Activate. (Use
Activate en un bloque using ( Using en Microsoft Visual Basic .NET).
Propiedades de AutomationElement de
almacenamiento en caché
1. Mientras un elemento CacheRequest está activo, obtenga objetos
AutomationElement mediante FindFirst o FindAll; u obtenga un elemento
AutomationElement como el origen de un evento para el que se registró para
cuando el elemento CacheRequest estaba activo. (También puede crear una caché
pasando un elemento CacheRequest a GetUpdatedCache o uno de los métodos
TreeWalker ).

2. Use GetCachedPropertyValue o recupere una propiedad desde la propiedad


Cached del elemento AutomationElement.

Obtener patrones almacenados en caché y sus


propiedades
1. Mientras un elemento CacheRequest está activo, obtenga objetos
AutomationElement mediante FindFirst o FindAll; u obtenga un elemento
AutomationElement como el origen de un evento para el que se registró para
cuando el elemento CacheRequest estaba activo. (También puede crear una caché
pasando un elemento CacheRequest a GetUpdatedCache o uno de los métodos
TreeWalker ).

2. Use GetCachedPattern o TryGetCachedPattern para recuperar un patrón


almacenado en caché.

3. Recupere valores de propiedad de la propiedad Cached del patrón de control.

Ejemplo 1
En el ejemplo de código siguiente se muestran varios aspectos del almacenamiento en
caché en los que se usa Activate para activar el elemento CacheRequest.

C#

/// <summary>
/// Caches and retrieves properties for a list item by using
CacheRequest.Activate.
/// </summary>
/// <param name="elementList">Element from which to retrieve a child
element.</param>
/// <remarks>
/// This code demonstrates various aspects of caching. It is not intended to
be
/// an example of a useful method.
/// </remarks>
private void CachePropertiesByActivate(AutomationElement elementList)
{
AutomationElement elementListItem;

// Set up the request.


CacheRequest cacheRequest = new CacheRequest();
cacheRequest.Add(AutomationElement.NameProperty);
cacheRequest.Add(AutomationElement.IsEnabledProperty);
cacheRequest.Add(SelectionItemPattern.Pattern);
cacheRequest.Add(SelectionItemPattern.SelectionContainerProperty);

// Obtain an element and cache the requested items.


using (cacheRequest.Activate())
{
Condition cond = new
PropertyCondition(AutomationElement.IsSelectionItemPatternAvailableProperty,
true);
elementListItem = elementList.FindFirst(TreeScope.Children, cond);
}
// The CacheRequest is now inactive.

// Retrieve the cached property and pattern.


SelectionItemPattern pattern;
String itemName;
try
{
itemName = elementListItem.Cached.Name;
pattern =
elementListItem.GetCachedPattern(SelectionItemPattern.Pattern) as
SelectionItemPattern;
}
catch (InvalidOperationException)
{
Console.WriteLine("Object was not in cache.");
return;
}
// Alternatively, you can use TryGetCachedPattern to retrieve the cached
pattern.
object cachedPattern;
if (true ==
elementListItem.TryGetCachedPattern(SelectionItemPattern.Pattern, out
cachedPattern))
{
pattern = cachedPattern as SelectionItemPattern;
}

// Specified pattern properties are also in the cache.


AutomationElement parentList = pattern.Cached.SelectionContainer;

// The following line will raise an exception, because the HelpText


property was not cached.
/*** String itemHelp = elementListItem.Cached.HelpText; ***/
// Similarly, pattern properties that were not specified in the
CacheRequest cannot be
// retrieved from the cache. This would raise an exception.
/*** bool selected = pattern.Cached.IsSelected; ***/

// This is still a valid call, even though the property is in the cache.
// Of course, the cached value and the current value are not guaranteed
to be the same.
itemName = elementListItem.Current.Name;
}

Ejemplo 2
En el ejemplo de código siguiente se muestran varios aspectos del almacenamiento en
caché en los que se usa Push para activar el elemento CacheRequest. Excepto cuando
quiera anidar solicitudes de almacenamiento en caché, es preferible utilizar Activate.

C#

/// <summary>
/// Caches and retrieves properties for a list item by using
CacheRequest.Push.
/// </summary>
/// <param name="autoElement">Element from which to retrieve a child
element.</param>
/// <remarks>
/// This code demonstrates various aspects of caching. It is not intended to
be
/// an example of a useful method.
/// </remarks>
private void CachePropertiesByPush(AutomationElement elementList)
{
// Set up the request.
CacheRequest cacheRequest = new CacheRequest();

// Do not get a full reference to the cached objects, only to their


cached properties and patterns.
cacheRequest.AutomationElementMode = AutomationElementMode.None;

// Cache all elements, regardless of whether they are control or content


elements.
cacheRequest.TreeFilter = Automation.RawViewCondition;

// Property and pattern to cache.


cacheRequest.Add(AutomationElement.NameProperty);
cacheRequest.Add(SelectionItemPattern.Pattern);

// Activate the request.


cacheRequest.Push();
// Obtain an element and cache the requested items.
Condition cond = new
PropertyCondition(AutomationElement.IsSelectionItemPatternAvailableProperty,
true);
AutomationElement elementListItem =
elementList.FindFirst(TreeScope.Children, cond);

// At this point, you could call another method that creates a


CacheRequest and calls Push/Pop.
// While that method was retrieving automation elements, the
CacheRequest set in this method
// would not be active.

// Deactivate the request.


cacheRequest.Pop();

// Retrieve the cached property and pattern.


String itemName = elementListItem.Cached.Name;
SelectionItemPattern pattern =
elementListItem.GetCachedPattern(SelectionItemPattern.Pattern) as
SelectionItemPattern;

// The following is an alternative way of retrieving the Name property.


itemName =
elementListItem.GetCachedPropertyValue(AutomationElement.NameProperty) as
String;

// This is yet another way, which returns AutomationElement.NotSupported


if the element does
// not supply a value. If the second parameter is false, a default name
is returned.
object objName =
elementListItem.GetCachedPropertyValue(AutomationElement.NameProperty,
true);
if (objName == AutomationElement.NotSupported)
{
itemName = "Unknown";
}
else
{
itemName = objName as String;
}

// The following call raises an exception, because only the cached


properties are available,
// as specified by cacheRequest.AutomationElementMode. If
AutomationElementMode had its
// default value (Full), this call would be valid.
/*** bool enabled = elementListItem.Current.IsEnabled; ***/
}

Consulte también
Almacenar en caché en los clientes de automatización de la interfaz de usuario
Suscribirse a eventos de UI Automation
Artículo • 10/05/2023

7 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 suscribirse a eventos generados por los proveedores de
UI Automation.

Ejemplo 1
El ejemplo de código siguiente registra un controlador de eventos para el evento que se
desencadena cuando se invoca un control como un botón y lo quita cuando se cierra el
formulario de la aplicación. El evento se identifica mediante un elemento
AutomationEvent que se pasa como parámetro a AddAutomationEventHandler.

C#

// Member variables.
AutomationElement ElementSubscribeButton;
AutomationEventHandler UIAeventHandler;

/// <summary>
/// Register an event handler for InvokedEvent on the specified element.
/// </summary>
/// <param name="elementButton">The automation element.</param>
public void SubscribeToInvoke(AutomationElement elementButton)
{
if (elementButton != null)
{
Automation.AddAutomationEventHandler(InvokePattern.InvokedEvent,
elementButton, TreeScope.Element,
UIAeventHandler = new
AutomationEventHandler(OnUIAutomationEvent));
ElementSubscribeButton = elementButton;
}
}

/// <summary>
/// AutomationEventHandler delegate.
/// </summary>
/// <param name="src">Object that raised the event.</param>
/// <param name="e">Event arguments.</param>
private void OnUIAutomationEvent(object src, AutomationEventArgs e)
{
// Make sure the element still exists. Elements such as tooltips
// can disappear before the event is processed.
AutomationElement sourceElement;
try
{
sourceElement = src as AutomationElement;
}
catch (ElementNotAvailableException)
{
return;
}
if (e.EventId == InvokePattern.InvokedEvent)
{
// TODO Add handling code.
}
else
{
// TODO Handle any other events that have been subscribed to.
}
}

private void ShutdownUIA()


{
if (UIAeventHandler != null)
{
Automation.RemoveAutomationEventHandler(InvokePattern.InvokedEvent,
ElementSubscribeButton, UIAeventHandler);
}
}

Ejemplo 2
En el ejemplo siguiente se muestra cómo utilizar Automatización de la interfaz de
usuario de Microsoft para suscribirse a un evento que se genera cuando cambia el foco.
Se anula el registro del controlador de eventos en un método al que se puede llamar al
cerrar la aplicación o cuando ya no se requiere la notificación de eventos de la interfaz
de usuario.

C#

AutomationFocusChangedEventHandler focusHandler = null;

/// <summary>
/// Create an event handler and register it.
/// </summary>
public void SubscribeToFocusChange()
{
focusHandler = new AutomationFocusChangedEventHandler(OnFocusChange);
Automation.AddAutomationFocusChangedEventHandler(focusHandler);
}

/// <summary>
/// Handle the event.
/// </summary>
/// <param name="src">Object that raised the event.</param>
/// <param name="e">Event arguments.</param>
private void OnFocusChange(object src, AutomationFocusChangedEventArgs e)
{
// TODO Add event handling code.
// The arguments tell you which elements have lost and received focus.
}

/// <summary>
/// Cancel subscription to the event.
/// </summary>
public void UnsubscribeFocusChange()
{
if (focusHandler != null)
{
Automation.RemoveAutomationFocusChangedEventHandler(focusHandler);
}
}

Consulte también
AddAutomationEventHandler
RemoveAllEventHandlers
RemoveAutomationEventHandler
Información general sobre eventos de UI Automation
Registrar un ensamblado de proveedor
de cliente
Artículo • 10/05/2023

7 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 registrar una DLL que contiene los proveedores de
Automatización de la interfaz de usuario del lado cliente.

Ejemplo
En el ejemplo siguiente se muestra cómo registrar un ensamblado que contiene un
proveedor para una ventana de consola.

C#

using System;
using System.Windows.Automation;
using System.Reflection;
using System.Runtime.InteropServices;
using System.IO;

namespace CSClient
{
class CSClientProgram
{
[DllImport("kernel32.dll")]
static extern IntPtr GetConsoleWindow();

static void Main(string[] args)


{
// TODO Change the path to the appropriate one for your
CSProviderDLL.
string fileloc = @"C:\SampleDependencies\CSProviderDLL.dll";
Assembly a = null;
try
{
a = Assembly.LoadFile(fileloc);
}
catch (FileNotFoundException e1)
{
Console.WriteLine(e1.Message);
}
if (a != null)
{
try
{

ClientSettings.RegisterClientSideProviderAssembly(a.GetName());
}
catch (ProxyAssemblyNotLoadedException e)
{
Console.WriteLine(e.Message);
}

IntPtr hwnd = GetConsoleWindow();

// Get an AutomationElement that represents the window.


AutomationElement elementWindow =
AutomationElement.FromHandle(hwnd);
Console.WriteLine("Found UI Automation client-side provider
for:");

// The name property is furnished by the client-side


provider.
Console.WriteLine(elementWindow.Current.Name);
Console.WriteLine();
}
Console.WriteLine("Press any key to exit.");
Console.ReadLine();
}
}
}

Consulte también
Crear un proveedor de UI Automation en el cliente
Utilizar la propiedad AutomationID
Artículo • 10/05/2023

7 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.

Este tema contiene escenarios y código de ejemplo que muestran cómo y cuándo
puede usarse el elemento AutomationIdProperty para buscar un elemento dentro del
árbol de UI Automation.

AutomationIdProperty identifica de manera única un elemento de Automatización de la


interfaz de usuario de sus elementos del mismo nivel. Para más información sobre los
identificadores de propiedad relacionados con la identificación de controles, vea UI
Automation Properties Overview.

7 Nota

AutomationIdProperty no garantiza una identidad única para todo el árbol;


normalmente se necesita información de ámbito y de contenedor para ser útil. Por
ejemplo, una aplicación puede contener un control de menú con varios elementos
de menú de nivel superior que, a su vez, tienen varios elementos de menú
secundarios. Estos elementos de menú secundarios pueden identificarse mediante
un esquema genérico como "Elemento1", "Elemento2", etc., lo que permite
identificadores duplicados para elementos secundarios en los elementos del menú
de nivel superior.

Escenarios
Se han identificado tres escenarios principales de aplicación de cliente de
Automatización de la interfaz de usuario que requieren el uso de AutomationIdProperty
para conseguir resultados precisos y coherentes cuando se buscan elementos.

7 Nota
AutomationIdProperty es compatible con todos los elementos de UI Automation
en la vista de control, excepto las ventanas de aplicación de nivel superior, los
elementos de UI Automation derivados de los controles de Windows Presentation
Foundation (WPF) que no tienen un ID o x:Uid, y los elementos de UI Automation
derivados de los controles Win32 que no tienen un ID de control.

Usar un valor de AutomationID único y reconocible para buscar un


elemento concreto en el árbol de Automatización de la interfaz de
usuario
Utilice una herramienta como UI Spy para informar de la AutomationIdProperty de
un elemento de interfaz de usuario de interés. Este valor se puede copiar y pegar
en una aplicación cliente, como un script de prueba para las pruebas
automatizadas posteriores. Este enfoque reduce y simplifica el código necesario
para identificar y localizar un elemento en tiempo de ejecución.

U Precaución

En general, debe intentar obtener solo elementos secundarios directos del


elemento RootElement. Una búsqueda de descendientes puede iterar a través de
cientos o incluso miles de elementos, lo que posiblemente provocaría un
desbordamiento de pila. Si intenta obtener un elemento concreto en un nivel
inferior, debe iniciar la búsqueda desde la ventana de aplicación o desde un
contenedor en un nivel inferior.

C#

///--------------------------------------------------------------------
/// <summary>
/// Finds all elements in the UI Automation tree that have a specified
/// AutomationID.
/// </summary>
/// <param name="targetApp">
/// The root element from which to start searching.
/// </param>
/// <param name="automationID">
/// The AutomationID value of interest.
/// </param>
/// <returns>
/// The collection of UI Automation elements that have the specified
/// AutomationID value.
/// </returns>
///--------------------------------------------------------------------
private AutomationElementCollection
FindElementFromAutomationID(AutomationElement targetApp,
string automationID)
{
return targetApp.FindAll(
TreeScope.Descendants,
new PropertyCondition(AutomationElement.AutomationIdProperty,
automationID));
}

Usar una ruta de acceso persistente para volver a un elemento


AutomationElement previamente identificado

Las aplicaciones cliente, desde los scripts de prueba simples a las utilidades
robustas de registro y reproducción, pueden requerir acceso a elementos de los
que actualmente no haya instancias, como un diálogo de apertura de archivo o un
elemento de menú y, por tanto, no existen en el árbol de Automatización de la
interfaz de usuario. Solo se pueden crear instancias de estos elementos mediante
la reproducción de una secuencia específica de acciones de la interfaz de usuario
mediante el uso de propiedades de automatización de la interfaz de usuario como
AutomationID, patrones de control y escuchadores de eventos.

C#

///--------------------------------------------------------------------
/// <summary>
/// Creates a UI Automation thread.
/// </summary>
/// <param name="sender">Object that raised the event.</param>
/// <param name="e">Event arguments.</param>
/// <remarks>
/// UI Automation must be called on a separate thread if the client
/// application itself could become a target for event handling.
/// For example, focus tracking is a desktop event that could involve
/// the client application.
/// </remarks>
///--------------------------------------------------------------------
private void CreateUIAThread(object sender, EventArgs e)
{
// Start another thread to do the UI Automation work.
ThreadStart threadDelegate = new ThreadStart(CreateUIAWorker);
Thread workerThread = new Thread(threadDelegate);
workerThread.Start();
}

///--------------------------------------------------------------------
/// <summary>
/// Delegated method for ThreadStart. Creates a UI Automation worker
/// class that does all UI Automation related work.
/// </summary>
///--------------------------------------------------------------------
public void CreateUIAWorker()
{
uiautoWorker = new FindByAutomationID(targetApp);
}
private FindByAutomationID uiautoWorker;

C#

///--------------------------------------------------------------------
/// <summary>
/// Function to playback through a series of recorded events calling
/// a WriteToScript function for each event of interest.
/// </summary>
/// <remarks>
/// A major drawback to using AutomationID for recording user
/// interactions in a volatile UI is the probability of catastrophic
/// change in the UI. For example, the //Processes// dialog where items
/// in the listbox container can change with no input from the user.
/// This mandates that a record and playback application must be
/// reliant on the tester owning the UI being tested. In other words,
/// there has to be a contract between the provider and client that
/// excludes uncontrolled, external applications. The added benefit
/// is the guarantee that each control in the UI should have an
/// AutomationID assigned to it.
///
/// This function relies on a UI Automation worker class to create
/// the System.Collections.Generic.Queue object that stores the
/// information for the recorded user interactions. This
/// allows post-processing of the recorded items prior to actually
/// writing them to a script. If this is not necessary the interaction
/// could be written to the script immediately.
/// </remarks>
///--------------------------------------------------------------------
private void Playback(AutomationElement targetApp)
{
AutomationElement element;
foreach(ElementStore storedItem in uiautoWorker.elementQueue)
{
PropertyCondition propertyCondition =
new PropertyCondition(
AutomationElement.AutomationIdProperty,
storedItem.AutomationID);
// Confirm the existence of a control.
// Depending on the controls and complexity of interaction
// this step may not be necessary or may require additional
// functionality. For example, to confirm the existence of a
// child menu item that had been invoked the parent menu item
// would have to be expanded.
element = targetApp.FindFirst(TreeScope.Descendants,
propertyCondition);
if(element == null)
{
// Control not available, unable to continue.
// TODO: Handle error condition.
return;
}
WriteToScript(storedItem.AutomationID, storedItem.EventID);
}
}

///--------------------------------------------------------------------
/// <summary>
/// Generates script code and outputs the code to a text control in
/// the client.
/// </summary>
/// <param name="automationID">
/// The AutomationID of the current control.
/// </param>
/// <param name="eventID">
/// The event recorded on that control.
/// </param>
///--------------------------------------------------------------------
private void WriteToScript(string automationID, string eventID)
{
// Script code would be generated and written to an output file
// as plain text at this point, but for the
// purposes of this example we just write to the console.
Console.WriteLine(automationID + " - " + eventID);
}

Usar una ruta de acceso relativa para volver a un elemento


AutomationElement previamente identificado
En ciertas circunstancias, como solo se garantiza que AutomationID es único entre
elementos del mismo nivel, varios elementos del árbol de Automatización de la
interfaz de usuario pueden tener valores de propiedad AutomationID idénticos. En
estos casos, los elementos se pueden identificar de forma única en función de un
elemento primario y, si es necesario, un elemento primario del primario. Por
ejemplo, un desarrollador puede proporcionar una barra de menús con varios
elementos de menú, cada uno de ellos con varios elementos de menú secundarios
donde se identifican los elementos secundarios con elementos AutomationID
secuenciales como "Elemento1", "Elemento2" y así sucesivamente. Cada elemento
de menú podría, por tanto, identificarse de forma única por su AutomationID junto
con el AutomationID de su elemento primario y, si es necesario, el elemento
primario de su primario.

Consulte también
AutomationIdProperty
Información general sobre el árbol de la UI Automation
Búsqueda de un elemento de Automatización de la interfaz de usuario basada en
una condición de propiedad
Patrones de control de UI Automation
Artículo • 09/05/2023

7 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 esta sección se proporciona información detallada sobre cómo usar patrones de


control de Microsoft UI Automation.

En esta sección
Implementación del patrón de control de acoplamiento de UI
AutomationImplementación del patrón de control ExpandCollapse de UI
AutomationImplementación del patrón de control de cuadrícula de UI
AutomationImplementación del patrón de control GridItem de UI
AutomationImplementación del patrón de control de invocación de UI
AutomationImplementación del patrón de control de vista múltiple de UI
AutomationImplementación del patrón de control RangeValue de UI
AutomationImplementación del patrón de control de desplazamiento de UI
AutomationImplementación del patrón de control UI Automation
ScrollItemImplementación del patrón de control de selección de UI
AutomationImplementación del patrón de control SelectionItem de UI
AutomationImplementación del patrón de control de la tabla del UI
AutomationImplementación del patrón de control TableItem de UI
AutomationImplementación del patrón de control de alternancia de UI
AutomationImplementación del patrón de control de transformación del UI
AutomationImplementación del patrón de control de valores de UI
AutomationImplementación del patrón de control de ventanas de UI AutomationTemas
prácticos
Implementar el patrón de control Dock
de UI Automation
Artículo • 08/04/2023

7 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 presentan las directrices y convenciones para implementar


IDockProvidery se incluye información sobre propiedades. Al final del tema se ofrecen
vínculos a referencias adicionales.

El patrón de control DockPattern se utiliza para exponer las propiedades de


acoplamiento de un control dentro de un contenedor de acoplamiento. Un contenedor
de acoplamiento es un control que permite organizar elementos secundarios horizontal
y verticalmente, relacionados entre sí. Para obtener ejemplos de controles que
implementan este patrón de control, vea Control Pattern Mapping for UI Automation
Clients.

Ejemplo de acoplamiento
de Visual Studio en el que la ventana "Vista de clases" es DockPosition.Right y la
ventana "Lista de errores" es DockPosition.Bottom

Directrices y convenciones de implementación


Al implementar el patrón de control Dock, tenga en cuenta las siguientes directrices y
convenciones:

IDockProvider no expone propiedades del contenedor de acoplamiento ni


propiedades de controles que estén acoplados adyacentes al control actual dentro
del contenedor de acoplamiento.

Los controles se acoplan de forma relativa entre ellos, según su valor actual de
orden Z; cuanto mayor es su ubicación de orden Z, más lejos se colocan del borde
especificado del contenedor de acoplamiento.

Si se cambia el tamaño del contenedor de acoplamiento, los controles acoplados


dentro del contenedor cambiarán de posición y se alinearán con el mismo borde
en el que estaban originalmente acoplados. Los controles acoplados también
cambiarán de tamaño para rellenar el espacio dentro del contenedor según el
comportamiento de acoplamiento de sus elementos DockPosition. Por ejemplo, si
se especifica Top , los lados izquierdo y derecho del control se expandirán para
rellenar el espacio disponible. Si se especifica Fill , los cuatro lados del control se
expandirán para rellenar el espacio disponible.

En un sistema de varios monitores, los controles se deben acoplar en el lado


izquierdo o derecho del monitor actual. Si no es posible, deben acoplarse en el
lado izquierdo del monitor que se encuentre más a la izquierda o en el lado
derecho del monitor que se encuentre más a la derecha.

Miembros requeridos para IDockProvider


Se requieren los métodos y propiedades siguientes para implementar la interfaz de
IDockProvider.

Miembros requeridos Tipo de miembro Notas

DockPosition Propiedad None

SetDockPosition Método None

Este patrón de control no tiene eventos asociados.

Excepciones
Los proveedores deben producir las siguientes excepciones.
Tipo de excepción Condición

InvalidOperationException SetDockPosition

- Cuando un control no puede ejecutar el estilo de acoplamiento


solicitado.

Consulte también
Información general acerca de los patrones de control de UI Automation
Patrones de control compatibles en un proveedor de UI Automation
Patrones de controles de UI Automation para clientes
Información general sobre el árbol de la UI Automation
Utilizar el almacenamiento en caché en la UI Automation
Implementar el patrón de control
ExpandCollapse de UI Automation
Artículo • 10/05/2023

7 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 presentan las directrices y convenciones para implementar


IExpandCollapseProvider, incluida la información sobre propiedades, métodos y eventos.
Al final de la información general se proporcionan vínculos a referencias adicionales.

El patrón de control ExpandCollapsePattern se usa para admitir controles que se


expanden visualmente para mostrar más contenido y se contraen para ocultarlo. Para
obtener ejemplos de controles que implementan este patrón de control, vea Control
Pattern Mapping for UI Automation Clients.

Directrices y convenciones de implementación


Al implementar el patrón de control ExpandCollapse, tenga en cuenta las siguientes
directrices y convenciones:

Los controles agregados, compilados con objetos secundarios que proporcionan la


funcionalidad de expandir y contraer a la interfaz de usuario, deben ser
compatibles con el patrón de control ExpandCollapsePattern , mientras que sus
elementos secundarios no tienen que serlo. Por ejemplo, se crea un control de
cuadro combinado con una combinación de cuadro de lista, botón y controles de
edición, pero solo el cuadro combinado primario debe ser compatible con el
ExpandCollapsePattern.

7 Nota

Una excepción es el control de menú, que es un agregado de objetos


MenuItem individuales. Los objetos MenuItem son compatibles con el patrón
de control ExpandCollapsePattern , pero el control Menú primario no lo es.
Se aplica una excepción similar a los controles Árbol y Elemento de árbol.

Si el ExpandCollapseState de un control se establece en LeafNode, toda


funcionalidad ExpandCollapsePattern está actualmente inactiva para el control y la
única información que se puede obtener mediante este patrón de control es
ExpandCollapseState. Si posteriormente se agrega cualquier objeto secundario,
ExpandCollapseState cambia y se activa la funcionalidad ExpandCollapsePattern .

ExpandCollapseState hace referencia únicamente a la visibilidad de los objetos


secundarios inmediatos, no a la visibilidad de todos los objetos descendientes.

La funcionalidad de expandir y contraer es específica del control. A continuación se


muestran ejemplos de este comportamiento.

El menú Personal de Office puede ser un MenuItem de tres estados (Expanded,


Collapsed y PartiallyExpanded), donde el control especifica el estado que se
debe adoptar cuando se llama a un Expand o Collapse .

Llamar a Expand en un objeto TreeItem puede hacer que se muestren todos los
descendientes o solo los elementos secundarios inmediatos.

Si llamar a Expand o Collapse en un control mantiene el estado de sus


descendientes, debería enviarse un evento de cambio de visibilidad, no un
evento de cambio de estado. Si el control primario no mantiene el estado de
sus descendientes cuando se contrae, el control podría destruir todos los
descendientes que ya no estén visibles y generar un evento destruido; o podría
cambiar la ExpandCollapseState de cada descendiente y generar un evento de
cambio de visibilidad.

Para garantizar la navegación, es deseable que un objeto esté en el árbol de UI


Automation (con el estado de visibilidad adecuado) independientemente de sus
elementos primarios ExpandCollapseState. Si los descendientes se generan a
petición, solo pueden aparecer en el árbol UI Automation después de que se
muestren por primera vez o solo mientras estén visibles.

Miembros requeridos para


IExpandCollapseProvider
Para implementar IExpandCollapseProvider, se requieren las siguientes propiedades y
métodos.
Miembros requeridos Tipo de Notas
miembro

ExpandCollapseState Propiedad None

Expand Método None

Collapse Método None

AutomationPropertyChangedEventHandler Evento Este control no tiene ningún evento


asociado; use este delegado genérico.

Excepciones
Los proveedores deben producir las siguientes excepciones.

Tipo de excepción Condición

InvalidOperationException Se llama a Expand o Collapse cuando ExpandCollapseState =


LeafNode.

Consulte también
Información general acerca de los patrones de control de UI Automation
Patrones de control compatibles en un proveedor de UI Automation
Patrones de controles de UI Automation para clientes
Navegar entre elementos de UI Automation con TreeWalker
Información general sobre el árbol de la UI Automation
Utilizar el almacenamiento en caché en la UI Automation
Implementar el patrón de control Grid
de UI Automation
Artículo • 08/04/2023

7 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 presentan las directrices y convenciones para implementar


IGridProvider, incluida la información sobre propiedades, métodos y eventos. Al final de
la información general se proporcionan vínculos a referencias adicionales.

El patrón de control GridPattern se usa para admitir controles que actúen como
contenedores para una colección de elementos secundarios. Los elementos secundarios
de este elemento deben implementar IGridItemProvider y organizarse en un sistema de
coordenadas lógico bidimensional que se pueda recorrer por filas y columnas. Para
obtener ejemplos de controles que implementan este patrón de control, vea Control
Pattern Mapping for UI Automation Clients.

Directrices y convenciones de implementación


Al implementar el patrón de control Grid, tenga en cuenta las siguientes directrices y
convenciones:

Las coordenadas de la cuadrícula son de base cero, donde la celda superior


izquierda (o la superior derecha, según la configuración regional) tiene las
coordenadas (0, 0).

Si una celda está vacía, todavía debe devolverse un elemento de Automatización


de la interfaz de usuario para admitir la propiedad ContainingGrid en esa celda.
Esto es posible si el diseño de elementos secundarios de la cuadrícula es similar a
una matriz irregular (consulte el ejemplo siguiente).
Ejemplo de un
control de cuadrícula con coordenadas vacías

Sigue siendo necesaria una cuadrícula con un elemento único para implementar
IGridProvider si lógicamente se considera una cuadrícula. El número de elementos
secundarios de la cuadrícula es irrelevante.

Las filas y columnas ocultas, según la implementación del proveedor, se pueden


cargar en el árbol de automatización de la interfaz de usuario y, por tanto, se
reflejarán en las propiedades RowCount y ColumnCount. Si las filas y columnas
ocultas todavía no se han cargado, no deben contarse.

IGridProvider no permite la manipulación activa de una cuadrícula;


ITransformProvider debe implementarse para habilitar esta funcionalidad.

Use un elemento StructureChangedEventHandler para permanecer a la escucha de


cambios estructurales o de diseño en la cuadrícula, como por ejemplo, celdas que
se hayan agregado, quitado o combinado.

Use un elemento AutomationFocusChangedEventHandler para realizar un


seguimiento del recorrido a través de los elementos o las celdas de una cuadrícula.

Miembros requeridos para IGridProvider


Se requieren los métodos y propiedades siguientes para implementar la interfaz de
IGridProvider.

Miembros requeridos Tipo Notas

RowCount Propiedad None

ColumnCount Propiedad None

GetItem Método None

Este patrón de control no tiene eventos asociados.

Excepciones
Los proveedores deben producir las siguientes excepciones.

Tipo de excepción Condición

ArgumentOutOfRangeException GetItem

- Si la coordenada de la fila solicitada es mayor que el valor de


RowCount o la coordenada de la columna es mayor que el
valor de ColumnCount.

ArgumentOutOfRangeException GetItem

- Si las coordenadas de la fila o columna solicitadas son


menores que cero.

Consulte también
Información general acerca de los patrones de control de UI Automation
Patrones de control compatibles en un proveedor de UI Automation
Patrones de controles de UI Automation para clientes
Implementar el patrón de control GridItem de UI Automation
Información general sobre el árbol de la UI Automation
Utilizar el almacenamiento en caché en la UI Automation
Implementar el patrón de control
GridItem de UI Automation
Artículo • 09/05/2023

7 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 presentan las directrices y convenciones para implementar


IGridItemProvidery se incluye información sobre propiedades. Al final de la información
general se proporcionan vínculos a referencias adicionales.

El patrón de control GridItemPattern se usa para admitir controles secundarios


individuales de contenedores que implementan IGridProvider. Para obtener ejemplos de
controles que implementan este patrón de control, vea Control Pattern Mapping for UI
Automation Clients.

Directrices y convenciones de implementación


Al implementar IGridProvider, tenga en cuenta las directrices y convenciones siguientes:

Las coordenadas de la cuadrícula son de base, donde la celda superior izquierda


tiene las coordenadas (0, 0).

Las celdas combinadas informarán de sus propiedades Row y Column según su


celda de anclaje subyacente, como define el proveedor de Automatización de la
interfaz de usuario. Normalmente, será la fila o columna superior izquierda.

IGridItemProvider no permite la manipulación activa de la cuadrícula, como la


combinación o la división de celdas.

Los controles que implementan IGridItemProvider normalmente se pueden


atravesar (es decir, un cliente de UI Automation puede moverse a los controles
adyacentes) con el teclado.
Miembros requeridos para IGridItemProvider
Para implementar IGridItemProvider, se requieren las siguientes propiedades y métodos.

Miembros requeridos Tipo de miembro Notas

Row Propiedad None

Column Propiedad None

RowSpan Propiedad None

ColumnSpan Propiedad None

ContainingGrid Propiedad None

Este patrón de control no tiene métodos o propiedades asociados.

Excepciones
Este patrón de control no tiene excepciones asociadas.

Consulte también
Información general acerca de los patrones de control de UI Automation
Patrones de control compatibles en un proveedor de UI Automation
Patrones de controles de UI Automation para clientes
Implementar el patrón de control Grid de UI Automation
Información general sobre el árbol de la UI Automation
Utilizar el almacenamiento en caché en la UI Automation
Implementar el patrón de control Invoke
de UI Automation
Artículo • 10/05/2023

7 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 presentan las directrices y convenciones para implementar


IInvokeProvider, incluida la información sobre eventos y propiedades. Al final del tema
se ofrecen vínculos a referencias adicionales.

El patrón de control InvokePattern se utiliza para admitir controles que no mantienen el


estado cuando se activan, sino que inician o realizan una única acción inequívoca. Los
controles que mantienen el estado, como las casillas y los botones de radio, deben
implementar en su lugar IToggleProvider y ISelectionItemProvider , respectivamente.
Para obtener ejemplos de controles que implementan el patrón de control Invoke, vea
Control Pattern Mapping for UI Automation Clients.

Directrices y convenciones de implementación


Al implementar el patrón de control Invoke, tenga en cuenta las siguientes directrices y
convenciones:

Los controles implementan IInvokeProvider si el mismo comportamiento no se


expone a través de otro proveedor de patrón de control. Por ejemplo, si el método
Invoke de un control realiza la misma acción que los métodos Expand o Collapse ,
el control no debe implementar IInvokeProvider.

Generalmente, la invocación de un control se realiza con un clic, un doble clic,


presionando la tecla ENTRAR, usando un método abreviado de teclado predefinido
o alguna combinación alternativa de pulsaciones de teclas.

Se generaInvokedEvent en un control que se ha activado (como respuesta a un


control que lleva a cabo su acción asociada). Si es posible, se debe generar el
evento después de que el control haya completado la acción y haya hecho la
devolución sin bloquearse. El evento Invoked debe generarse antes de atender la
solicitud Invoke en los escenarios siguientes:

No es posible ni práctico esperar hasta que se complete la acción.

La acción requiere la interacción del usuario.

La acción requiere mucho tiempo y provocará que el cliente que llama se


bloquee durante un tiempo considerable.

Si la invocación del control tiene efectos secundarios significativos, esos efectos


secundarios se deben exponer a través de la propiedad HelpText . Por ejemplo,
aunque Invoke no se asocie a la selección, Invoke puede provocar que se
seleccione otro control.

Normalmente, los efectos de mantener el puntero (o pasar el mouse por encima)


no constituyen un evento Invoked. Sin embargo, los controles que realizan una
acción (en lugar de producir un efecto visual) según el estado del efecto de
mantener el puntero deben admitir el patrón de control InvokePattern .

7 Nota

Esta implementación se considera un problema de accesibilidad si el control solo se


puede invocar como resultado de un efecto secundario relacionado con el mouse.

La invocación de un control es diferente de la selección de un elemento. No


obstante, dependiendo del control, su invocación puede provocar que el elemento
se seleccione como un efecto secundario. Por ejemplo, la invocación de un
elemento de lista de documentos de Microsoft Word en la carpeta Mis
documentos selecciona el elemento y abre el documento.

Un elemento puede desaparecer del árbol de la automatización de la interfaz de


usuario inmediatamente después de que se invoque. La solicitud de información
del elemento que proporciona la devolución de llamada de evento puede producir
un error como resultado. La solución recomendada es la captura previa de la
información almacenada en caché.

Los controles pueden implementar varios patrones de control. Por ejemplo, el


control Fill Color de la barra de herramientas de Microsoft Excel implementa los
patrones de control InvokePattern y ExpandCollapsePattern.
ExpandCollapsePattern expone el menú y el elemento InvokePattern rellena la
selección activa con el color elegido.
Miembros requeridos para IInvokeProvider
Para implementar IInvokeProvider, se requieren las siguientes propiedades y métodos.

Miembros Tipo de Notas


requeridos miembro

Invoke method Invoke es una llamada asincrónica y debe volver inmediatamente sin
bloquearse.

Este comportamiento es especialmente importante para los controles


que, directa o indirectamente, inician un cuadro de diálogo modal
cuando se invocan. Cualquier cliente de Automatización de la interfaz
de usuario que haya provocado que el evento permanezca bloqueado
hasta que se cierre el cuadro de diálogo modal.

Excepciones
Los proveedores deben producir las siguientes excepciones.

Tipo de excepción Condición

ElementNotEnabledException Si el control no está habilitado.

Consulte también
Información general acerca de los patrones de control de UI Automation
Patrones de control compatibles en un proveedor de UI Automation
Patrones de controles de UI Automation para clientes
Llamar a un control utilizando la UI Automation
Información general sobre el árbol de la UI Automation
Utilizar el almacenamiento en caché en la UI Automation
Implementación del patrón de control
MultipleView de UI Automation
Artículo • 10/05/2023

7 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 presentan las directrices y convenciones para implementar


IMultipleViewProvider, incluida la información sobre eventos y propiedades. Al final del
tema se ofrecen vínculos a referencias adicionales.

El patrón de control MultipleViewPattern se usa para admitir controles que ofrecen y


pueden cambiar entre varias representaciones del mismo conjunto de información o
controles secundarios.

Entre los ejemplos de controles que pueden presentar varias vistas se incluyen la vista
de lista, (que puede mostrar su contenido como miniaturas, mosaicos, iconos o detalles),
los gráficos de Microsoft Excel, (circulares, de líneas, de barras, valor de celda con una
fórmula), los documentos de Microsoft Word, (normal, diseño web, diseño de impresión,
diseño de lectura, esquema), el calendario de Microsoft Outlook, (año, mes, semana, día)
y las máscaras de Microsoft Windows Media Player. Las vistas admitidas las determina el
desarrollador del control y son específicas de cada control.

Directrices y convenciones de implementación


Al implementar el patrón de control Multiple View, tenga en cuenta las siguientes
directrices y convenciones:

IMultipleViewProvider también se debe implementar en un contenedor que


administre la vista actual si es diferente de un control que ofrece la vista actual. Por
ejemplo, el Explorador de Windows contiene un control de lista para el contenido
de la carpeta actual, mientras que la vista del control se administra desde la
aplicación del Explorador de Windows.
No se considera que un control que puede ordenar su contenido admita varias
vistas.

La colección de vistas debe ser idéntica en todas las instancias.

Los nombres de vista deben ser adecuados para su usarlo en texto a voz, Braille y
otras aplicaciones de lenguaje natural.

Miembros requeridos para


IMultipleViewProvider
Para implementar IMultipleViewProvider, se requieren las siguientes propiedades y
métodos.

Miembros requeridos Tipo de miembro Notas

CurrentView Propiedad None

GetSupportedViews Método None

GetViewName Método None

SetCurrentView Método None

No hay ningún evento asociado a este patrón de control.

Excepciones
Los proveedores debe generar las siguientes excepciones.

Tipo de excepción Condición

ArgumentException Cuando se llama a SetCurrentView o GetViewName con un parámetro que


no es miembro de la colección de vistas compatible.

Consulte también
Información general acerca de los patrones de control de UI Automation
Patrones de control compatibles en un proveedor de UI Automation
Patrones de controles de UI Automation para clientes
Información general sobre el árbol de la UI Automation
Utilizar el almacenamiento en caché en la UI Automation
Implementar el patrón de control
RangeValue de UI Automation
Artículo • 08/04/2023

7 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 presentan las directrices y convenciones para implementar


IRangeValueProvider, incluida la información sobre eventos y propiedades. Al final del
tema se ofrecen vínculos a referencias adicionales.

El patrón de control RangeValuePattern se utiliza para admitir controles que se pueden


establecer en un valor dentro de un intervalo. Para obtener ejemplos de controles que
implementan este patrón de control, vea Control Pattern Mapping for UI Automation
Clients.

Directrices y convenciones de implementación


Al implementar el patrón de control Range Value, tenga en cuenta las siguientes
directrices y convenciones:

Los controles permiten la recalibración de sus propiedades compatibles según las


preferencias de usuario o la configuración regional. Un ejemplo de esto es un
control de termómetro que puede establecerse para mostrar la temperatura en
grados Fahrenheit o Celsius.

Los controles que tienen valores de intervalo ambiguos, como las barras de
progreso o los controles deslizantes, deben tener dichos valores normalizados.

Ejemplo de una barra de progreso donde el valor


es de tipo entero y los valores de propiedad mínimo y máximo se normalizan en 0
y 100, respectivamente
Miembros requeridos para
IRangeValueProvider
Miembro requerido Tipo de miembro Notas

IsReadOnlyProperty Propiedad None

ValueProperty Propiedad None

LargeChangeProperty Propiedad None

SmallChangeProperty Propiedad None

MaximumProperty Propiedad None

MinimumProperty Propiedad None

SetValue Métodos None

Este patrón de control no tiene eventos asociados.

Excepciones
Los proveedores deben producir las siguientes excepciones.

Tipo de excepción Condición

ArgumentOutOfRangeException Se llama aSetValue con un valor que es mayor que


MaximumProperty o menor que MinimumProperty.

Consulte también
Información general acerca de los patrones de control de UI Automation
Patrones de control compatibles en un proveedor de UI Automation
Patrones de controles de UI Automation para clientes
Información general sobre el árbol de la UI Automation
Utilizar el almacenamiento en caché en la UI Automation
Implementación del patrón de control
Scroll de UI Automation
Artículo • 11/04/2023

7 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 presentan las directrices y convenciones para implementar


IScrollProvider, incluida la información sobre eventos y propiedades. Al final del tema se
ofrecen vínculos a referencias adicionales.

El patrón de control ScrollPattern se usa para admitir un control que actúe como
contenedor desplazable para una colección de objetos secundarios. No se requiere el
control para el uso de barras de desplazamiento para admitir la funcionalidad de
desplazamiento, aunque lo hace habitualmente.
Ejemplo de un control de desplazamiento que no usa
barras de desplazamiento

Para obtener ejemplos de controles que implementan este control, vea Control Pattern
Mapping for UI Automation Clients.

Directrices y convenciones de implementación


Al implementar el patrón de control Scroll, tenga en cuenta las siguientes directrices y
convenciones:

Los elementos secundarios de este control deben implementar IScrollItemProvider.

Las barras de desplazamiento de un control de contenedor no admiten el patrón


de control ScrollPattern . Deben admitir el patrón de control RangeValuePattern en
su lugar.

Cuando el desplazamiento se mide en porcentajes, todos los valores o cantidades


relacionadas con la graduación del desplazamiento deben normalizarse a un
intervalo de 0 a 100.

Las propiedadesHorizontallyScrollableProperty y VerticallyScrollableProperty son


independientes de la propiedad IsEnabledProperty.

Si HorizontallyScrollableProperty = false , HorizontalViewSizeProperty debe


establecerse en el 100 % y HorizontalScrollPercentProperty debe establecerse en
NoScroll. De igual modo, si VerticallyScrollableProperty = false ,
VerticalViewSizeProperty debe establecerse en el 100 por ciento y
VerticalScrollPercentProperty debe establecerse en NoScroll. Esto permite que un
cliente de la automatización de la interfaz de usuario use estos valores de
propiedad del método SetScrollPercent a la vez que se evita una condición de
carrera si se activa una dirección que al cliente no le interesa para
desplazamiento.

HorizontalScrollPercent es específica de la configuración regional. La configuración


de HorizontalScrollPercent = 100,0 debe establecer la ubicación de
desplazamiento del control en el equivalente de su posición que se encuentra
situada más a la derecha para idiomas como el inglés que se leen de izquierda a
derecha. Otra alternativa, para idiomas como el árabe que se leen de derecha a
izquierda, la configuración de HorizontalScrollPercent = 100,0 debe establecer la
ubicación de desplazamiento a la posición que se encuentra más a la izquierda.

Miembros requeridos para IScrollProvider


Para implementar IScrollProvider, se requieren las siguientes propiedades y métodos.

Miembro requerido Tipo de miembro Notas

HorizontalScrollPercent Propiedad None

VerticalScrollPercent Propiedad None

HorizontalViewSize Propiedad None

VerticalViewSize Propiedad None

HorizontallyScrollable Propiedad None

VerticallyScrollable Propiedad None

Scroll Método None

SetScrollPercent Método None

Este patrón de control no tiene eventos asociados.

Excepciones
Los proveedores deben producir las siguientes excepciones.
Tipo de excepción Condición

ArgumentException Scroll genera esta excepción si un control admite valores


SmallIncrement exclusivamente para el desplazamiento
horizontal o vertical, pero se pasa un valor LargeIncrement .

ArgumentException SetScrollPercent genera esta excepción cuando se pasa un


valor que no se puede convertir a un tipo double.

ArgumentOutOfRangeException SetScrollPercent genera esta excepción cuando se pasa un


valor superior a 100 o menor de 0 (excepto -1, que equivale a
NoScroll).

InvalidOperationException Tanto Scroll como SetScrollPercent generan esta excepción


cuando se intenta un desplazamiento en una dirección no
admitida.

Consulte también
Información general acerca de los patrones de control de UI Automation
Patrones de control compatibles en un proveedor de UI Automation
Patrones de controles de UI Automation para clientes
Información general sobre el árbol de la UI Automation
Utilizar el almacenamiento en caché en la UI Automation
Implementar el patrón de control
ScrollItem de UI Automation
Artículo • 10/05/2023

7 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 presentan las directrices y convenciones para implementar


IScrollItemProvider, incluida la información sobre propiedades, métodos y eventos. Al
final del tema se ofrecen vínculos a referencias adicionales.

El patrón de control ScrollItemPattern se usa para admitir controles secundarios


individuales de contenedores que implementan IScrollProvider. Este patrón de control
actúa como canal de comunicación entre un control secundario y su contenedor para
garantizar que el contenedor puede cambiar el contenido (o región) visible en ese
momento dentro de su ventanilla para mostrar el control secundario. Para obtener
ejemplos de controles que implementan este patrón de control, vea Control Pattern
Mapping for UI Automation Clients.

Directrices y convenciones de implementación


Al implementar el patrón de control Scroll Item, tenga en cuenta las siguientes
directrices y convenciones:

Los elementos que se incluye en un control Window o Canvas no tienen que


implementar la interfaz de IScrollItemProvider. Sin embargo, como alternativa,
deben exponer una ubicación válida para BoundingRectangleProperty. Esto
permitirá que una aplicación cliente de UI Automation use los métodos de patrón
de control ScrollPattern en el contenedor para que muestre el elemento
secundario.

Miembros requeridos para IScrollItemProvider


El siguiente método es necesario para implementar la interfaz de IScrollProvider.

Miembros requeridos Tipo de miembro Notas

ScrollIntoView - Método None

Este patrón de control no tiene eventos o propiedades asociados.

Excepciones
Los proveedores deben producir las siguientes excepciones.

Tipo de excepción Condición

InvalidOperationException Si no se puede desplazar un elemento en la vista:

- ScrollIntoView

Consulte también
Información general acerca de los patrones de control de UI Automation
Patrones de control compatibles en un proveedor de UI Automation
Patrones de controles de UI Automation para clientes
Información general sobre el árbol de la UI Automation
Utilizar el almacenamiento en caché en la UI Automation
Implementar el patrón de control
Selection de UI Automation
Artículo • 11/04/2023

7 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 presentan las directrices y convenciones para implementar


ISelectionProvider, incluida la información sobre eventos y propiedades. Al final del
tema se ofrecen vínculos a referencias adicionales.

El patrón de control SelectionPattern se usa para admitir controles que actúan como
contenedores para una colección de elementos secundarios seleccionables. Los
elementos secundarios de este elemento deben implementar ISelectionItemProvider.
Para obtener ejemplos de controles que implementan este patrón de control, vea
Control Pattern Mapping for UI Automation Clients.

Directrices y convenciones de implementación


Al implementar el patrón de control Selection, tenga en cuenta las siguientes directrices
y convenciones:

Los controles que implementan ISelectionProvider permiten la selección de


elementos secundarios únicos o múltiples. Por ejemplo, el cuadro de lista, la vista
de lista y la vista de árbol admiten varias selecciones mientras que el cuadro
combinado, el control deslizante y el grupo de botones de radio admiten la
selección única.

Los controles que tienen un intervalo mínimo, máximo y continuo, como el control
deslizante Volumen , deben implementar IRangeValueProvider en lugar de
ISelectionProvider.

Los controles de selección única que administran los controles secundarios que
implementan IRawElementProviderFragmentRoot, como el control deslizante de
Resolución de pantalla del cuadro de diálogo Propiedades de pantalla o el
control de selección Selector de colores de Microsoft Word (se muestra a
continuación), deben implementar ISelectionProvider; sus elementos secundarios
deben implementar tanto IRawElementProviderFragment como
ISelectionItemProvider.

Ejemplo de asignación de una cadena de muestra de colores

Los menús no admiten SelectionPattern. Si trabaja con elementos de menú que


incluyen tanto gráficos como texto (como los elementos del panel de vista previa
del menú Ver de Microsoft Outlook) y tiene que transmitir el estado, debe
implementar IToggleProvider.

Miembros requeridos para ISelectionProvider


Para la interfaz de ISelectionProvider , se requieren las siguientes propiedades, métodos
y eventos.

Miembros Tipo Notas


requeridos

CanSelectMultiple Propiedad Debe admitir eventos de cambio de propiedad mediante


AddAutomationPropertyChangedEventHandler y
RemoveAutomationPropertyChangedEventHandler.

IsSelectionRequired Propiedad Debe admitir eventos de cambio de propiedad mediante


AddAutomationPropertyChangedEventHandler y
RemoveAutomationPropertyChangedEventHandler.

GetSelection Método None

InvalidatedEvent Evento Se produce cuando una selección de un contenedor ha


cambiado de manera considerable y requiere el envío de más
eventos de adición y eliminación de lo que permite la
constante InvalidateLimit .

Las propiedades IsSelectionRequired y CanSelectMultiple pueden ser dinámicas. Por


ejemplo, es posible que el estado inicial de un control no tenga elementos
seleccionados de forma predeterminada, lo que indica que IsSelectionRequired es
false . Sin embargo, cuando se haya seleccionado un elemento, el control siempre debe

tener al menos un elemento seleccionado. Del mismo modo, en raras ocasiones, un


control podría permitir la selección de varios elementos en la inicialización pero solo
permitir posteriormente la realización de selecciones únicas.
Excepciones
Los proveedores deben producir las siguientes excepciones.

Tipo de excepción Condición

ElementNotEnabledException Si el control no está habilitado.

InvalidOperationException Si el control está oculto.

Consulte también
Información general acerca de los patrones de control de UI Automation
Patrones de control compatibles en un proveedor de UI Automation
Patrones de controles de UI Automation para clientes
Implementación del patrón de control SelectionItem de UI Automation
Información general sobre el árbol de la UI Automation
Utilizar el almacenamiento en caché en la UI Automation
Implementación del patrón de control
SelectionItem de UI Automation
Artículo • 09/05/2023

7 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 presentan las directrices y convenciones para implementar


ISelectionItemProvider, incluida la información sobre propiedades, métodos y eventos.
Al final de la información general se proporcionan vínculos a referencias adicionales.

El patrón de control SelectionItemPattern se usa para admitir controles que actúan


como elementos secundarios individuales y seleccionables de controles de contenedor
que implementan ISelectionProvider. Para obtener ejemplos de controles que
implementan el patrón de control SelectionItem, vea Asignación de patrones de control
para clientes de Automatización de interfaz de usuario.

Directrices y convenciones de implementación


Al implementar el patrón de control Selection Item, tenga en cuenta las siguientes
directrices y convenciones:

Los controles de selección única que administran los controles secundarios que
implementan IRawElementProviderFragmentRoot, como el control deslizante de
Resolución de pantalla del cuadro de diálogo de Propiedades de pantalla , deben
implementar ISelectionProvider y sus elementos secundarios deben implementar
tanto IRawElementProviderFragment como ISelectionItemProvider.

Miembros requeridos para


ISelectionItemProvider
Para implementar ISelectionItemProvider, se requieren las siguientes propiedades,
métodos y eventos.
Miembros Tipo de Notas
requeridos miembro

CanSelectMultiple Propiedad None

IsSelectionRequired Propiedad None

GetSelection Método None

InvalidatedEvent Evento Se produce cuando una selección de un contenedor ha


cambiado de manera considerable y requiere el envío de más
eventos ElementSelectedEvent y
ElementRemovedFromSelectionEvent de lo que permite la
constante InvalidateLimit .

Si el resultado de Select, AddToSelectiono RemoveFromSelection es un elemento


seleccionado único, se debe generar un ElementSelectedEvent ; en caso contrario,
envíe ElementAddedToSelectionEvent/ ElementRemovedFromSelectionEvent según
sea adecuado.

Excepciones
Los proveedores deben producir las siguientes excepciones.

Tipo de excepción Condición

InvalidOperationException Cuando se intenten cualquiera de las siguientes opciones:

- RemoveFromSelection en un contenedor de selección única donde


IsSelectionRequiredProperty = true y ya hay un elemento
seleccionado.
- RemoveFromSelection en un contenedor de selección múltiple
donde IsSelectionRequiredProperty = true y solo hay un elemento
seleccionado.
- AddToSelection en un contenedor de selección única donde
CanSelectMultipleProperty = false y ya hay otro elemento
seleccionado.

Consulte también
Información general acerca de los patrones de control de UI Automation
Patrones de control compatibles en un proveedor de UI Automation
Patrones de controles de UI Automation para clientes
Implementar el patrón de control Selection de UI Automation
Información general sobre el árbol de la UI Automation
Utilizar el almacenamiento en caché en la UI Automation
Ejemplo de proveedor de fragmentos
Implementar el patrón de control Table
de UI Automation
Artículo • 08/04/2023

7 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 presentan las directrices y convenciones para implementar


ITableProvider, incluida la información sobre propiedades, métodos y eventos. Al final
de la información general se proporcionan vínculos a referencias adicionales.

El patrón de control TablePattern se usa para admitir controles que actúen como
contenedores para una colección de elementos secundarios. Los elementos secundarios
de este elemento deben implementar ITableItemProvider y organizarse en un sistema de
coordenadas lógico bidimensional que se pueda recorrer por filas y columnas. Este
patrón de control es análogo a IGridProvider, con la diferencia de que cualquier control
que implemente ITableProvider también debe exponer una relación de encabezado de
columna o fila para cada elemento secundario. Para obtener ejemplos de controles que
implementan este patrón de control, vea Control Pattern Mapping for UI Automation
Clients.

Directrices y convenciones de implementación


Al implementar el patrón de control Table, tenga en cuenta las siguientes directrices y
convenciones:

El acceso al contenido de celdas individuales se realiza a través de un sistema de


coordenadas lógico bidimensional o la matriz ofrecida por la implementación
simultánea necesaria de IGridProvider.

Un encabezado de columna o fila puede estar dentro de un objeto de tabla o ser


un objeto de encabezado independiente asociado a un objeto de tabla.
Los encabezados de fila y columna pueden incluir tanto un encabezado principal
como cualquier encabezado auxiliar.

7 Nota

Este concepto se vuelve evidente en una hoja de cálculo de Microsoft Excel donde
un usuario ha definido una columna "Nombre". Esta columna tiene ahora dos
encabezados: el encabezado "Nombre" definido por el usuario y la designación
alfanumérica para esa columna asignada por la aplicación.

Para ver la funcionalidad relacionada de los elementos de cuadrícula, consulte


Implementar el patrón de control Grid de Automatización de la interfaz de usuario.

Ejemplo de tabla con


encabezados de columna complejos

Ejemplo de tabla con la


propiedad RowOrColumnMajor ambigua

Miembros requeridos para ITableProvider


Se requieren los siguientes métodos y propiedades para la interfaz de ITableProvider.

Miembros requeridos Tipo de miembro Notas

RowOrColumnMajor Propiedad None

GetColumnHeaders Método None


Miembros requeridos Tipo de miembro Notas

GetRowHeaders Método None

Este patrón de control no tiene eventos asociados.

Excepciones
Este patrón de control no tiene excepciones asociadas.

Consulte también
Información general acerca de los patrones de control de UI Automation
Patrones de control compatibles en un proveedor de UI Automation
Patrones de controles de UI Automation para clientes
Implementar el patrón de control TableItem de UI Automation
Implementar el patrón de control Grid de UI Automation
Información general sobre el árbol de la UI Automation
Utilizar el almacenamiento en caché en la UI Automation
Implementar el patrón de control
TableItem de UI Automation
Artículo • 09/05/2023

7 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 presentan las directrices y convenciones para implementar


ITableItemProvider, incluida la información sobre eventos y propiedades. Al final de la
información general se proporcionan vínculos a referencias adicionales.

El patrón de control TableItemPattern se usa para admitir controles secundarios de


contenedores que implementan ITableProvider. El acceso a la funcionalidad de celda
individual lo proporciona la implementación simultánea necesaria de IGridItemProvider.
Este patrón de control es análogo a IGridItemProvider, con la diferencia de que
cualquier control que implemente ITableItemProvider debe exponer mediante
programación la relación entre la celda individual y su información de fila y columna.
Para obtener ejemplos de controles que implementan este patrón de control, vea
Control Pattern Mapping for UI Automation Clients.

Directrices y convenciones de implementación


Para ver la funcionalidad relacionada de elementos de cuadrícula, consulte
Implementar el patrón de control GridItem de automatización de la interfaz de
usuario.

Miembros requeridos para ITableItemProvider


Miembro requerido Tipo de miembro Notas

GetColumnHeaderItems Método None

GetRowHeaderItems Método None


Este patrón de control no tiene eventos o propiedades asociados.

Excepciones
Este patrón de control no tiene excepciones asociadas.

Consulte también
Información general acerca de los patrones de control de UI Automation
Patrones de control compatibles en un proveedor de UI Automation
Patrones de controles de UI Automation para clientes
Implementar el patrón de control Table de UI Automation
Implementar el patrón de control GridItem de UI Automation
Información general sobre el árbol de la UI Automation
Utilizar el almacenamiento en caché en la UI Automation
Implementar el patrón de control
Toggle de UI Automation
Artículo • 09/05/2023

7 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 presentan las directrices y convenciones para implementar


IToggleProvider, incluida la información sobre métodos y propiedades. Al final del tema
se ofrecen vínculos a referencias adicionales.

El patrón de control TogglePattern se usa para admitir controles que pueden recorrer un
conjunto de estados y mantener un estado una vez establecido. Para obtener ejemplos
de controles que implementan este patrón de control, vea Control Pattern Mapping for
UI Automation Clients.

Directrices y convenciones de implementación


Al implementar el patrón de control Toggle, tenga en cuenta las siguientes directrices y
convenciones:

Los controles que no mantienen el estado cuando se activan, como botones,


botones de barra de herramientas e hipervínculos, deben implementar
IInvokeProvider en su lugar.

Un control debe recorrer su ToggleState en el siguiente orden: On, Off y, si se


admite, Indeterminate.

TogglePattern no ofrece un método SetState(newState) debido a problemas


relacionados con la configuración directa de una CheckBox de tres estados sin
recorrer su secuencia ToggleState correspondiente.

El control RadioButton no implementa IToggleProvider, ya que no es capaz de


recorrer sus estados válidos.
Miembros requeridos para IToggleProvider
Para implementar IToggleProvider, se requieren las siguientes propiedades y métodos.

Miembro requerido Tipo de miembro Notas

Toggle Método None

ToggleStateProperty Propiedad None

Este patrón de control no tiene eventos asociados.

Excepciones
Este patrón de control no tiene excepciones asociadas.

Consulte también
Información general acerca de los patrones de control de UI Automation
Patrones de control compatibles en un proveedor de UI Automation
Patrones de controles de UI Automation para clientes
Obtener el estado de alternancia de una casilla mediante UI Automation
Información general sobre el árbol de la UI Automation
Utilizar el almacenamiento en caché en la UI Automation
Implementación del patrón de control
Transform de UI Automation
Artículo • 10/05/2023

7 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 presentan las directrices y convenciones para implementar


ITransformProvider, incluida la información sobre propiedades, métodos y eventos. Al
final del tema se ofrecen vínculos a referencias adicionales.

El patrón de control TransformPattern se utsa para admitir controles que se pueden


mover, cambiar de tamaño o girar dentro de un espacio bidimensional. Para obtener
ejemplos de controles que implementan este patrón de control, vea Control Pattern
Mapping for UI Automation Clients.

Directrices y convenciones de implementación


Al implementar el patrón de control Transform, tenga en cuenta las siguientes
directrices y convenciones:

La compatibilidad con este patrón de control no se limita a los objetos del


escritorio. Este patrón de control también lo admite los elementos secundarios de
un objeto contenedor si los elementos secundarios se pueden mover, cambiar de
tamaño o girar libremente dentro de los límites del contenedor.

Un objeto no se puede mover, cambiar de tamaño o girar de manera que su


ubicación en pantalla resultante quede completamente fuera de las coordenadas
de su contenedor y que, por tanto, sea inaccesible para el teclado o el mouse (por
ejemplo, cuando una ventana de nivel superior se mueva fuera de la pantalla o un
objeto secundario se mueva fuera de los límites de la ventanilla del contenedor).
En estos casos, el objeto se coloca lo más cerca posible de las coordenadas de
pantalla solicitadas reemplazando las coordenadas superiores o izquierdas para
que se encuentren dentro de los límites del contenedor.
Para sistemas de varios monitores, si se mueve un objeto, cambia de tamaño o gira
completamente fuera de las coordenadas de pantalla de escritorio combinadas, el
objeto se coloca en el monitor principal lo más cerca posible de las coordenadas
solicitadas.

Todos los parámetros y los valores de propiedad son absolutos e independientes


de la configuración regional.

Miembros requeridos para ITransformProvider


Para implementar ITransformProvider, se requieren las siguientes propiedades y
métodos.

Miembros requeridos Tipo de miembro Notas

CanMove Propiedad None

CanResize Propiedad None

CanRotate Propiedad None

Move Método None

Resize Método None

Rotate Método None

Este patrón de control no tiene eventos asociados.

Excepciones
Los proveedores deben producir las siguientes excepciones.

Tipo de excepción Condición

InvalidOperationException Move

- Si es CanMoveProperty falso.

InvalidOperationException Resize

- Si es CanResizeProperty falso.

InvalidOperationException Rotate

- Si es CanRotateProperty falso.
Consulte también
Información general acerca de los patrones de control de UI Automation
Patrones de control compatibles en un proveedor de UI Automation
Patrones de controles de UI Automation para clientes
Información general sobre el árbol de la UI Automation
Utilizar el almacenamiento en caché en la UI Automation
Implementar el patrón de control Value
de UI Automation
Artículo • 10/05/2023

7 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 presentan las directrices y convenciones para implementar


IValueProvidery se incluye información sobre eventos y propiedades. Al final del tema se
ofrecen vínculos a referencias adicionales.

El patrón de control ValuePattern se utiliza para admitir controles que tienen un valor
intrínseco que no abarca un intervalo y que se puede representar como una cadena.
Esta cadena puede ser editable, dependiendo del control y su configuración. Para
obtener ejemplos de controles que implementan este patrón, vea Control Pattern
Mapping for UI Automation Clients.

Directrices y convenciones de implementación


Al implementar el patrón de control Value, tenga en cuenta las siguientes directrices y
convenciones:

Los controles como ListItem y TreeItem deben admitir ValuePattern si el valor de


cualquiera de los elementos es modificable, sin tener en cuenta el modo de
edición actual del control. El control primario también debe admitir ValuePattern si
los elementos secundarios son modificables.

Ejemplo de elemento de
lista editable
Los controles de edición de línea única admiten el acceso mediante programación
a su contenido a través de la implementación de IValueProvider. Sin embargo, los
controles de edición multilínea no implementan IValueProvider; en su lugar,
proporcionan acceso a su contenido mediante la implementación de ITextProvider.

Para recuperar el contenido textual de un control de edición de multilínea, el


control debe implementar ITextProvider. Sin embargo, ITextProvider no admite
establecer el valor de un control.

IValueProvider no admite la recuperación de la información de formato ni los


valores de subcadenas. Implemente ITextProvider en estos escenarios.

IValueProvider debe implementarse mediante controles, como el control de


selección Selector de colores de Microsoft Word (se muestra a continuación), que
admite la asignación de cadenas entre un valor de color (por ejemplo, "amarillo") y
una estructura RGB interna equivalente.

Ejemplo de asignación de cadenas de muestra de color

Un control debe tener el valor de su IsEnabledProperty establecido en true y el


valor de IsReadOnlyProperty establecido en false antes de permitir una llamada a
SetValue.

Miembros requeridos para IValueProvider


Para implementar IValueProvider, se requieren las siguientes propiedades y métodos.

Miembros requeridos Tipo de miembro Notas

IsReadOnlyProperty Propiedad None

ValueProperty Propiedad None

SetValue Método None

Excepciones
Los proveedores deben producir las siguientes excepciones.

Tipo de excepción Condición


Tipo de excepción Condición

InvalidOperationException SetValue

- Si la información específica de la configuración regional se pasa


a un control en formato incorrecto, como una fecha con formato
incorrecto.

ArgumentException SetValue

- Si no se puede convertir un nuevo valor de una cadena a un


formato que el control reconozca.

ElementNotEnabledException SetValue

- Si se realiza un intento de manipular un control que no está


habilitado.

Consulte también
Información general acerca de los patrones de control de UI Automation
Patrones de control compatibles en un proveedor de UI Automation
Patrones de controles de UI Automation para clientes
Ejemplo de Insert Text de ValuePattern
Información general sobre el árbol de la UI Automation
Utilizar el almacenamiento en caché en la UI Automation
Implementar el patrón de control
Window de UI Automation
Artículo • 09/05/2023

7 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 presentan las directrices y convenciones para implementar


IWindowProvider, incluida la información sobre las propiedades, los métodos y los
eventos de WindowPattern . Al final del tema se ofrecen vínculos a referencias
adicionales.

El patrón de control WindowPattern se utiliza para admitir controles que ofrecen


funcionalidad fundamental basada en la ventana dentro de una interfaz gráfica de
usuario tradicional (GUI). Entre los ejemplos de controles que deben implementar este
patrón de control se incluyen las ventanas de la aplicación de nivel superior, las
ventanas secundarias de interfaz de múltiples documentos (MDI), los controles de panel
de división que se pueden cambiar de tamaño, los cuadros de diálogo modales y las
ventanas de globo de ayuda.

Directrices y convenciones de implementación


Al implementar el patrón de control Window, tenga en cuenta las siguientes directrices
y convenciones:

Para admitir la capacidad de modificar el tamaño de la ventana y la posición de la


pantalla mediante Automatización de la interfaz de usuario, un control debe
implementar ITransformProvider además de IWindowProvider.

Los controles que contienen barras de título y elementos de barra de título que
permiten que el control se mueva, cambie de tamaño, se maximice, minimice o se
cierre son normalmente necesarios para implementar IWindowProvider.
Los controles como los elementos emergentes de información sobre herramientas
y las listas desplegables de menús o cuadros combinados normalmente no
implementan IWindowProvider.

Las ventanas de globo de ayuda se diferencian de los elementos emergentes de


información sobre herramientas básicos en el aprovisionamiento de un botón de
cierre de tipo ventana.

El modo de pantalla completa no es compatible con IWindowProvider, ya que es


una característica específica de una aplicación y no es el comportamiento de
ventana típico.

Miembros necesarios para IWindowProvider


Para la interfaz de IWindowProvider, se requieren los siguientes métodos, eventos y
propiedades.

Miembro requerido Tipo de miembro Notas

InteractionState Propiedad None

IsModal Propiedad None

IsTopmost Propiedad None

Maximizable Propiedad None

Minimizable Propiedad None

VisualState Propiedad None

Close Método None

SetVisualState Método None

WaitForInputIdle Método None

WindowClosedEvent Evento None

WindowOpenedEvent Evento None

WindowInteractionState Evento No se garantiza que sea ReadyForUserInteraction

Excepciones
Los proveedores deben producir las siguientes excepciones.
Tipo de excepción Condición

InvalidOperationException SetVisualState

- Cuando un control no admite un comportamiento solicitado.

ArgumentOutOfRangeException WaitForInputIdle

- Cuando el parámetro no es un número válido.

Consulte también
Información general acerca de los patrones de control de UI Automation
Patrones de control compatibles en un proveedor de UI Automation
Patrones de controles de UI Automation para clientes
Información general sobre el árbol de la UI Automation
Utilizar el almacenamiento en caché en la UI Automation
Temas "Cómo..." sobre los patrones de
control de UI Automation
Artículo • 09/05/2023

7 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 sección contiene información detallada sobre la implementación de los patrones de


control.

En esta sección
Exponer el contenido de una tabla mediante Automatización de la interfaz de
usuarioObtener patrones de control admitidos Automatización de la interfaz de
usuarioobtener el estado de alternancia de una casilla mediante Automatización de la
interfaz de usuario Invocar un control mediante Automatización de la interfaz de
usuarioMover un elemento Automatización de la interfaz de usuario
Exponer el contenido de una tabla
mediante UI Automation
Artículo • 10/05/2023

7 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 se puede usar la automatización de la interfaz de usuario


de Microsoft para exponer el contenido y las propiedades intrínsecas de cada celda
dentro de un control tabular.

Ejemplo
En el ejemplo de código siguiente se muestra cómo obtener un objeto
AutomationElement que representa el contenido de una celda de tabla; también se
obtienen propiedades de celda, como índices de fila y columna, intervalos de filas y
columnas, y también se obtiene información de encabezado de las filas y columnas. En
este ejemplo se usa un controlador de eventos de cambio de foco para simular el
recorrido de teclado de un control tabular que implementa automatización de la
interfaz de usuario. La información de cada elemento de tabla se expone en un evento
de cambio de foco.

7 Nota

Dado que los cambios de foco son eventos de escritorio globales, se deben filtrar
los eventos de cambio de foco fuera de la tabla. Consulte el ejemplo TrackFocus
para obtener una implementación relacionada.

C#

/// -------------------------------------------------------------------
/// <summary>
/// Starts the target application and returns the AutomationElement
/// obtained from the targets window handle.
/// </summary>
/// <param name="exe">
/// The target application.
/// </param>
/// <param name="filename">
/// The text file to be opened in the target application
/// </param>
/// <returns>
/// An AutomationElement representing the target application.
/// </returns>
/// -------------------------------------------------------------------
private AutomationElement StartTarget(string exe, string filename)
{
// Start text editor and load with a text file.
Process p = Process.Start(exe, filename);

// targetApp --> the root AutomationElement


AutomationElement targetApp =
AutomationElement.FromHandle(p.MainWindowHandle);

return targetApp;
}

C#

/// -------------------------------------------------------------------
/// <summary>
/// Obtain the table control of interest from the target application.
/// </summary>
/// <param name="targetApp">
/// The target application.
/// </param>
/// <returns>
/// An AutomationElement representing a table control.
/// </returns>
/// -------------------------------------------------------------------
private AutomationElement GetTableElement(AutomationElement targetApp)
{
// The control type we're looking for; in this case 'Document'
PropertyCondition cond1 =
new PropertyCondition(
AutomationElement.ControlTypeProperty,
ControlType.Table);

// The control pattern of interest; in this case 'TextPattern'.


PropertyCondition cond2 =
new PropertyCondition(
AutomationElement.IsTablePatternAvailableProperty,
true);

AndCondition tableCondition = new AndCondition(cond1, cond2);

AutomationElement targetTableElement =
targetApp.FindFirst(TreeScope.Descendants, tableCondition);

// If targetTableElement is null then a suitable table control


// was not found.
return targetTableElement;
}

C#

///--------------------------------------------------------------------
/// <summary>
/// Obtains a TableItemPattern control pattern from an
/// AutomationElement.
/// </summary>
/// <param name="targetControl">
/// The AutomationElement of interest.
/// </param>
/// <returns>
/// A TableItemPattern object.
/// </returns>
///--------------------------------------------------------------------
private TableItemPattern GetTableItemPattern(
AutomationElement targetControl)
{
TableItemPattern tableItemPattern = null;

try
{
tableItemPattern =
targetControl.GetCurrentPattern(
TableItemPattern.Pattern)
as TableItemPattern;
}
// Object doesn't support the
// TableItemPattern control pattern
catch (InvalidOperationException)
{
return null;
}

return tableItemPattern;
}

C#

///--------------------------------------------------------------------
/// <summary>
/// Obtains a TablePattern control pattern from an
/// AutomationElement.
/// </summary>
/// <param name="targetControl">
/// The AutomationElement of interest.
/// </param>
/// <returns>
/// A TablePattern object.
/// </returns>
///--------------------------------------------------------------------
private TablePattern GetTablePattern(
AutomationElement targetControl)
{
TablePattern tablePattern = null;

try
{
tablePattern =
targetControl.GetCurrentPattern(
TablePattern.Pattern)
as TablePattern;
}
// Object doesn't support the
// TablePattern control pattern
catch (InvalidOperationException)
{
return null;
}

return tablePattern;
}

C#

///--------------------------------------------------------------------
/// <summary>
/// Set up table item event listeners.
/// </summary>
/// <remarks>
/// The event listener is essentially a focus change listener.
/// Since this is a global desktop listener, a filter would be required
/// to ignore focus change events outside the table.
/// </remarks>
///--------------------------------------------------------------------
private void SetTableItemEventListeners()
{
AutomationFocusChangedEventHandler tableItemFocusChangedListener =
new AutomationFocusChangedEventHandler(OnTableItemFocusChange);
Automation.AddAutomationFocusChangedEventHandler(
tableItemFocusChangedListener);
}

C#

///--------------------------------------------------------------------
/// <summary>
/// Event handler for table item focus change.
/// Can be used to track traversal of individual table items
/// within a table.
/// </summary>
/// <param name="src">Object that raised the event.</param>
/// <param name="e">Event arguments.</param>
///--------------------------------------------------------------------
private void OnTableItemFocusChange(
object src, AutomationFocusChangedEventArgs e)
{
// Make sure the element still exists. Elements such as tooltips
// can disappear before the event is processed.
AutomationElement sourceElement;
try
{
sourceElement = src as AutomationElement;
}
catch (ElementNotAvailableException)
{
return;
}

// Get a TableItemPattern from the source of the event.


TableItemPattern tableItemPattern =
GetTableItemPattern(sourceElement);

if (tableItemPattern == null)
{
return;
}

// Get a TablePattern from the container of the current element.


TablePattern tablePattern =
GetTablePattern(tableItemPattern.Current.ContainingGrid);

if (tablePattern == null)
{
return;
}

AutomationElement tableItem = null;


try
{
tableItem = tablePattern.GetItem(
tableItemPattern.Current.Row,
tableItemPattern.Current.Column);
}
catch (ArgumentOutOfRangeException)
{
// If the requested row coordinate is larger than the RowCount
// or the column coordinate is larger than the ColumnCount.
// -- OR --
// If either of the requested row or column coordinates
// is less than zero.
// TO DO: error handling.
}
// Further event processing can be done at this point.
// For the purposes of this sample we can just record item properties.
string controlType =
tableItem.Current.ControlType.LocalizedControlType;
AutomationElement[] columnHeaders =
tableItemPattern.Current.GetColumnHeaderItems();
AutomationElement[] rowHeaders =
tableItemPattern.Current.GetRowHeaderItems();
int itemRow = tableItemPattern.Current.Row;
int itemColumn = tableItemPattern.Current.Column;
int itemRowSpan = tableItemPattern.Current.RowSpan;
int itemColumnSpan = tableItemPattern.Current.ColumnSpan;
}

///--------------------------------------------------------------------
/// <summary>
/// Handles the application shutdown.
/// </summary>
/// <param name="args">Event arguments.</param>
///--------------------------------------------------------------------
protected override void OnExit(System.Windows.ExitEventArgs args)
{
Automation.RemoveAllEventHandlers();
base.OnExit(args);
}

Consulte también
Información general acerca de los patrones de control de UI Automation
Patrones de controles de UI Automation para clientes
Implementar el patrón de control Table de UI Automation
Implementar el patrón de control TableItem de UI Automation
Implementar el patrón de control Grid de UI Automation
Implementar el patrón de control GridItem de UI Automation
Obtener patrones de control de UI
Automation admitidos
Artículo • 10/05/2023

7 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 muestra cómo recuperar los objetos de patrón de control de elementos de
automatización de la interfaz de usuario.

Obtener todos los patrones de control


1. Obtenga el elemento AutomationElement que tenga los patrones en los que está
interesado.

2. Llame a GetSupportedPatterns para obtener todos los patrones de control del


elemento.

U Precaución

Se recomienda encarecidamente que un cliente no utilice GetSupportedPatterns. El


rendimiento puede verse afectado gravemente a medida que este método llama a
GetCurrentPattern internamente para cada patrón de control existente. Si es
posible, un cliente debe llamar a GetCurrentPattern para los patrones clave de
interés.

Obtener un patrón de Control concreto


1. Obtenga el elemento AutomationElement que tenga los patrones en los que está
interesado.

2. Llame a GetCurrentPattern o TryGetCurrentPattern para consultar un patrón


concreto. Estos métodos son similares, pero si no se encuentra el patrón,
GetCurrentPattern genera una excepción y TryGetCurrentPattern devuelve false .

Ejemplo
En el ejemplo siguiente se recupera un valor AutomationElement para un elemento de
lista y se obtiene un valor SelectionItemPattern de ese elemento.

C#

/// <summary>
/// Sets the focus to a list and selects a string item in that list.
/// </summary>
/// <param name="listElement">The list element.</param>
/// <param name="itemText">The text to select.</param>
/// <remarks>
/// This deselects any currently selected items. To add the item to the
current selection
/// in a multiselect list, use AddToSelection instead of Select.
/// </remarks>
public void SelectListItem(AutomationElement listElement, String itemText)
{
if ((listElement == null) || (itemText == ""))
{
throw new ArgumentException("Argument cannot be null or empty.");
}
listElement.SetFocus();
Condition cond = new PropertyCondition(
AutomationElement.NameProperty, itemText,
PropertyConditionFlags.IgnoreCase);
AutomationElement elementItem =
listElement.FindFirst(TreeScope.Children, cond);
if (elementItem != null)
{
SelectionItemPattern pattern;
try
{
pattern =
elementItem.GetCurrentPattern(SelectionItemPattern.Pattern) as
SelectionItemPattern;
}
catch (InvalidOperationException ex)
{
Console.WriteLine(ex.Message); // Most likely "Pattern not
supported."
return;
}
pattern.Select();
}
}
Consulte también
Patrones de controles de UI Automation para clientes
Obtener el estado de alternancia de una
casilla mediante UI Automation
Artículo • 10/05/2023

7 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 usar la automatización de la interfaz de usuario de


Microsoft para obtener el estado de alternancia de un control.

Ejemplo
En este ejemplo se usa el método GetCurrentPattern de la clase AutomationElement
para obtener un objeto TogglePattern de un control y devolver su propiedad
ToggleState.

C#

/// <summary>
/// Gets the toggle state of an element in the target application.
/// </summary>
/// <param name="element">The target element.</param>
private bool IsElementToggledOn(AutomationElement element)
{
if (element == null)
{
// TODO: Invalid parameter error handling.
return false;
}

Object objPattern;
TogglePattern togPattern;
if (true == element.TryGetCurrentPattern(TogglePattern.Pattern, out
objPattern))
{
togPattern = objPattern as TogglePattern;
return togPattern.Current.ToggleState == ToggleState.On;
}
// TODO: Object doesn't support TogglePattern error handling.
return false;
}
Llamar a un control utilizando la UI
Automation
Artículo • 09/05/2023

7 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 realizar las tareas siguientes:

Busque un control que coincida con las condiciones de propiedad específicas


recorriendo la vista de control del árbol de automatización de la interfaz de
usuario de la aplicación de destino.

Crear un AutomationElement para cada control.

Obtener un objeto InvokePattern de cualquier elemento de automatización de la


interfaz de usuario encontrado que admita el patrón de controlInvokePattern.

Use Invoke para invocar el control desde un controlador de eventos de cliente.

Ejemplo
En este ejemplo se utiliza el método TryGetCurrentPattern de la clase
AutomationElement para generar un objeto InvokePattern e invocar un control
mediante el método Invoke .

C#

///--------------------------------------------------------------------
/// <summary>
/// Walks the UI Automation tree of the target and reports the control
/// type of each element it finds in the control view to the client.
/// </summary>
/// <param name="targetTreeViewElement">
/// The root of the search on this iteration.
/// </param>
/// <param name="elementIndex">
/// The TreeView index for this iteration.
/// </param>
/// <remarks>
/// This is a recursive function that maps out the structure of the
/// subtree of the target beginning at the AutomationElement passed in
/// as the rootElement on the first call. This could be, for example,
/// an application window.
/// CAUTION: Do not pass in AutomationElement.RootElement. Attempting
/// to map out the entire subtree of the desktop could take a very
/// long time and even lead to a stack overflow.
/// </remarks>
///--------------------------------------------------------------------
private void FindTreeViewDescendants(
AutomationElement targetTreeViewElement, int treeviewIndex)
{
if (targetTreeViewElement == null)
return;

AutomationElement elementNode =
TreeWalker.ControlViewWalker.GetFirstChild(targetTreeViewElement);

while (elementNode != null)


{
Label elementInfo = new Label();
elementInfo.Margin = new Thickness(0);
clientTreeViews[treeviewIndex].Children.Add(elementInfo);

// Compile information about the control.


elementInfoCompile = new StringBuilder();
string controlName =
(elementNode.Current.Name == "") ?
"Unnamed control" : elementNode.Current.Name;
string autoIdName =
(elementNode.Current.AutomationId == "") ?
"No AutomationID" : elementNode.Current.AutomationId;

elementInfoCompile.Append(controlName)
.Append(" (")
.Append(elementNode.Current.ControlType.LocalizedControlType)
.Append(" - ")
.Append(autoIdName)
.Append(")");

// Test for the control patterns of interest for this sample.


object objPattern;
ExpandCollapsePattern expcolPattern;
if (true ==
elementNode.TryGetCurrentPattern(ExpandCollapsePattern.Pattern, out
objPattern))
{
expcolPattern = objPattern as ExpandCollapsePattern;
if (expcolPattern.Current.ExpandCollapseState !=
ExpandCollapseState.LeafNode)
{
Button expcolButton = new Button();
expcolButton.Margin = new Thickness(0, 0, 0, 5);
expcolButton.Height = 20;
expcolButton.Width = 100;
expcolButton.Content = "ExpandCollapse";
expcolButton.Tag = expcolPattern;
expcolButton.Click +=
new RoutedEventHandler(ExpandCollapse_Click);
clientTreeViews[treeviewIndex].Children.Add(expcolButton);
}
}
TogglePattern togPattern;
if (true == elementNode.TryGetCurrentPattern(TogglePattern.Pattern,
out objPattern))
{
togPattern = objPattern as TogglePattern;
Button togButton = new Button();
togButton.Margin = new Thickness(0, 0, 0, 5);
togButton.Height = 20;
togButton.Width = 100;
togButton.Content = "Toggle";
togButton.Tag = togPattern;
togButton.Click += new RoutedEventHandler(Toggle_Click);
clientTreeViews[treeviewIndex].Children.Add(togButton);
}
InvokePattern invPattern;
if (true == elementNode.TryGetCurrentPattern(InvokePattern.Pattern,
out objPattern))
{
invPattern = objPattern as InvokePattern;
Button invButton = new Button();
invButton.Margin = new Thickness(0);
invButton.Height = 20;
invButton.Width = 100;
invButton.Content = "Invoke";
invButton.Tag = invPattern;
invButton.Click += new RoutedEventHandler(Invoke_Click);
clientTreeViews[treeviewIndex].Children.Add(invButton);
}
// Display compiled information about the control.
elementInfo.Content = elementInfoCompile;
Separator sep = new Separator();
clientTreeViews[treeviewIndex].Children.Add(sep);

// Iterate to next element.


// elementNode - Current element.
// treeviewIndex - Index of parent TreeView.
FindTreeViewDescendants(elementNode, treeviewIndex);
elementNode =
TreeWalker.ControlViewWalker.GetNextSibling(elementNode);
}
}

C#
///--------------------------------------------------------------------
/// <summary>
/// Handles the Invoke click event on the client control.
/// The client click handler calls Invoke() on the equivalent target
control.
/// </summary>
/// <param name="sender">The object that raised the event.</param>
/// <param name="e">Event arguments.</param>
/// <remarks>
/// The Tag property of the FrameworkElement, the client button in this
/// case, is used to store the InvokePattern object previously obtained
/// from the associated target control.
/// </remarks>
///--------------------------------------------------------------------
void Invoke_Click(object sender, RoutedEventArgs e)
{
Button clientButton = sender as Button;
InvokePattern targetInvokePattern = clientButton.Tag as InvokePattern;
if (targetInvokePattern == null)
return;
targetInvokePattern.Invoke();
statusText.Text = "Button invoked.";
}

Consulte también
InvokePattern, ExpandCollapsePattern, y TogglePattern Sample
Mover un elemento de UI Automation
Artículo • 10/05/2023

7 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 ejemplo se muestra cómo mover un elemento automatización de la interfaz de


usuario a una ubicación de pantalla especificada.

Ejemplo
En el ejemplo siguiente se usa los patrones de control WindowPattern y
TransformPattern para mover mediante programación una aplicación de destino
Win32 a ubicaciones discretas de pantalla y realizar un seguimiento de
BoundingRectanglePropertyAutomationPropertyChangedEvent.

C#

/// <summary>
/// The Startup handler.
/// </summary>
/// <param name="e">The event arguments</param>
protected override void OnStartup(StartupEventArgs e)
{
// Start the WindowMove client.
CreateWindow();

try
{
// Obtain an AutomationElement from the target window handle.
targetWindow = StartTargetApp(targetApplication);

// Does the automation element exist?


if (targetWindow == null)
{
Feedback("No target.");
return;
}
Feedback("Found target.");
// find current location of our window
targetLocation = targetWindow.Current.BoundingRectangle.Location;

// Obtain required control patterns from our automation element


windowPattern = GetControlPattern(targetWindow,
WindowPattern.Pattern) as WindowPattern;

if (windowPattern == null) return;

// Make sure our window is usable.


// WaitForInputIdle will return before the specified time
// if the window is ready.
if (false == windowPattern.WaitForInputIdle(10000))
{
Feedback("Object not responding in a timely manner.");
return;
}
Feedback("Window ready for user interaction");

// Register for required events


RegisterForEvents(
targetWindow, WindowPattern.Pattern, TreeScope.Element);

// Obtain required control patterns from our automation element


transformPattern =
GetControlPattern(targetWindow, TransformPattern.Pattern)
as TransformPattern;

if (transformPattern == null) return;

// Is the TransformPattern object moveable?


if (transformPattern.Current.CanMove)
{
// Enable our WindowMove fields
xCoordinate.IsEnabled = true;
yCoordinate.IsEnabled = true;
moveTarget.IsEnabled = true;

// Move element
transformPattern.Move(0, 0);
}
else
{
Feedback("Window is not moveable.");
}
}
catch (ElementNotAvailableException)
{
Feedback("Client window no longer available.");
return;
}
catch (InvalidOperationException)
{
Feedback("Client window cannot be moved.");
return;
}
catch (Exception exc)
{
Feedback(exc.ToString());
}
}

C#

/// <summary>
/// Handles the 'Move' button invoked event.
/// By default, the Move method does not allow an object
/// to be moved completely off-screen.
/// </summary>
/// <param name="src">The object that raised the event.</param>
/// <param name="e">Event arguments.</param>
private void btnMove_Click(object src, RoutedEventArgs e)
{
try
{
// If coordinate left blank, substitute 0
if (xCoordinate.Text == "") xCoordinate.Text = "0";
if (yCoordinate.Text == "") yCoordinate.Text = "0";

// Reset background colours


xCoordinate.Background = System.Windows.Media.Brushes.White;
yCoordinate.Background = System.Windows.Media.Brushes.White;

if (windowPattern.Current.WindowVisualState ==
WindowVisualState.Minimized)
windowPattern.SetWindowVisualState(WindowVisualState.Normal);

double X = double.Parse(xCoordinate.Text);
double Y = double.Parse(yCoordinate.Text);

// Should validate the requested screen location


if ((X < 0) ||
(X >= (SystemParameters.WorkArea.Width -
targetWindow.Current.BoundingRectangle.Width)))
{
Feedback("X-coordinate would place the window all or partially
off-screen.");
xCoordinate.Background = System.Windows.Media.Brushes.Yellow;
}

if ((Y < 0) ||
(Y >= (SystemParameters.WorkArea.Height -
targetWindow.Current.BoundingRectangle.Height)))
{
Feedback("Y-coordinate would place the window all or partially
off-screen.");
yCoordinate.Background = System.Windows.Media.Brushes.Yellow;
}
// transformPattern was obtained from the target window.
transformPattern.Move(X, Y);
}
catch (ElementNotAvailableException)
{
Feedback("Client window no longer available.");
return;
}
catch (InvalidOperationException)
{
Feedback("Client window cannot be moved.");
return;
}
}

Consulte también
Ejemplo de WindowPattern
Modelo de texto de UI Automation
Artículo • 09/05/2023

7 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.

Este tema contiene información general y temas de procedimientos para ayudarle a


empezar a programar elementos de texto en Microsoft UI Automation.

En esta sección
Descripción de UI Automation TextPatternDescripción de TextPattern y objetos
incrustadosTemas de procedimiento

Referencia
System.Windows.Automation.Text

Consulte también
Patrones de control de UI Automation
Patrones de controles de UI Automation para clientes
Información general sobre el modelo de
texto de UI Automation
Artículo • 08/04/2023

7 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 describe cómo usar la automatización de la interfaz de usuario de


Microsoft para exponer el contenido textual, incluidos los atributos de estilo y formato,
de los controles de texto en plataformas compatibles con la automatización de la
interfaz de usuario. Estos controles incluyen, entre otros, los controles TextBox y
RichTextBox de Microsoft .NET Framework, así como sus equivalentes de Win32.

Exponer el contenido textual de un control se logra mediante el uso del patrón de


control TextPattern , que representa el contenido de un contenedor de texto como una
secuencia de texto. A su vez, TextPattern requiere el soporte de la clase
TextPatternRange para exponer atributos de formato y estilo. TextPatternRange da
soporte a TextPattern mediante la representación de intervalos de texto contiguos,
múltiples o no contiguos en un contenedor de texto con una colección de extremos
Start y End . TextPatternRange admite la funcionalidad como selección, comparación,
recuperación y exploración transversal.

7 Nota

Las clase TextPattern no proporcionan un medio para insertar o modificar texto. Sin
embargo, en función del control, esto se puede lograr mediante el elemento
ValuePattern de la automatización de la interfaz de usuario o mediante acciones
del teclado directas. Vea TextPattern Insert Text Sample para obtener un
ejemplo.

La funcionalidad descrita en este artículo es vital para los proveedores de tecnología de


asistencia y sus usuarios finales. Las tecnologías de asistencia pueden usar la
automatización de la interfaz de usuario para recopilar información de formato de texto
completa para el usuario y proporcionar navegación y selección de texto mediante
programación por cada TextUnit (carácter, palabra, línea o párrafo).

TextPattern de automatización de la interfaz de


usuario versus Text Services Framework (TSF)
Text Services Framework (TSF) es un marco de sistema simple y escalable que habilita los
servicios de lenguaje natural y entrada de texto avanzada en el escritorio y en las
aplicaciones. Además de proporcionar interfaces para aplicaciones para exponer su
almacén de texto, también admite metadatos para ese almacén de texto.

Sin embargo, TSF se diseñó para aplicaciones que tienen que insertar entradas en
escenarios con contexto, mientras que TextPattern es una solución de solo lectura (con
la solución limitada apuntada anteriormente) que pretende proporcionar acceso
optimizado a un almacén de texto para los lectores de pantalla y dispositivos Braille.

En resumen, las tecnologías de accesibilidad que requieren acceso de solo lectura a un


almacén de texto pueden usar TextPattern, pero necesitarán la funcionalidad más
compleja de TSF para la entrada con contexto.

Tipos de controles

Texto
El control de texto (Text) es el elemento básico que representa un fragmento de texto en
la pantalla.

Un control de texto independiente puede usarse como una etiqueta o texto estático en
un formulario. Los controles de texto también pueden estar dentro de la estructura de
un ListItem, TreeItem o DataItem.

7 Nota

Es posible que los controles de texto no aparezcan en la vista de contenido del


árbol de automatización de la interfaz de usuario (consulte Información general
sobre el árbol de automatización de la interfaz de usuario). Esto se debe a que los
controles de texto se muestran a menudo a través de la propiedad Name de otro
control. Por ejemplo, el texto que se usa para etiquetar un control de edición (Edit)
se expone a través de la propiedad Name del control de edición. Dado que el
control de edición se encuentra en la vista de contenido del árbol de
automatización de la interfaz de usuario, no es necesario que el propio elemento
de texto esté en esa vista del árbol de automatización de la interfaz de usuario. El
único texto que se muestra en la vista de contenido es el texto que no es
información redundante. Esto permite a las tecnologías de asistencia filtrar
rápidamente solo los fragmentos de información que necesitan los usuarios.

Editar
Los controles de edición (Edit) permiten al usuario ver y editar una sola línea de texto.

7 Nota

La única línea de texto puede encapsularse en ciertos escenarios de diseño.

Documento
Los controles de documento permiten a un usuario navegar y obtener información de
varias páginas de texto.

API de cliente de TextPattern


Tipo Descripción

Clase System.Windows.Automation.TextPattern Punto de entrada del modelo de texto de


automatización de la interfaz de usuario
de Microsoft.

Esta clase también contiene las dos


escuchas de eventos de TextPattern ,
TextSelectionChangedEvent y
TextChangedEvent.
Tipo Descripción

Clase Es la representación de un intervalo de


System.Windows.Automation.Text.TextPatternRange texto dentro de un contenedor de texto
que admite TextPattern.

Los clientes de automatización de la


interfaz de usuario debe tener cuidado
con la validez actual de un intervalo de
texto creado con TextPatternRange. Si el
texto original del control de texto se
reemplaza totalmente por el nuevo texto,
el intervalo de texto actual deja de ser
válido. Sin embargo, puede que el
intervalo de texto aún tenga alguna
viabilidad si únicamente se cambia una
parte del texto original y el control de
texto subyacente está administrando su
“puntero” de texto con delimitadores (o
extremos) en lugar de con la posición de
carácter absoluto.

Los clientes pueden realizar escuchas de


un TextChangedEvent para recibir
notificaciones de los cambios realizados
en el contenido textual con el que
trabajan.

Clase Se usa para identificar los atributos de


System.Windows.Automation.AutomationTextAttribute formato de un intervalo de texto.

API de proveedor de TextPattern


Los controles o elementos de la interfaz de usuario que admiten TextPattern al
implementar las interfaces ITextProvider e ITextRangeProvider, ya sea de forma nativa o
mediante los proxy de la automatización de la interfaz de usuario de Microsoft, son
capaces de exponer información detallada de los atributos de cualquier texto que
contengan, además de proporcionar funcionalidades de navegación sólidas.

Un proveedor de TextPattern no tiene que admitir todos los atributos de texto si el


control no es compatible con algún atributo concreto.

Un proveedor de TextPattern debe admitir las funciones GetSelection y Select si el


control admite la selección de texto o la ubicación del cursor de texto (o símbolo de
inserción) dentro del área de texto. Si el control no admite esta funcionalidad, no es
necesario que admita ninguno de estos métodos. Sin embargo, el control debe
implementar la propiedad SupportedTextSelection a fin de exponer el tipo de selección
de texto que admite.

Un proveedor de TextPattern siempre debe admitir las constantes TextUnit y Character


de Document , así como cualquier otras constantes de TextUnit que es capaz de admitir.

7 Nota

El proveedor puede omitir la compatibilidad para un determinado TextUnit si se


aplaza al siguiente mayor TextUnit compatible en el orden siguiente: Character,
Format, Word, Line, Paragraph, Pagey Document.

API Descripción

ITextProvider (interfaz) Expone métodos, propiedades y los


atributos que admiten TextPattern en las
aplicaciones cliente (consulte ITextProvider).

ITextRangeProvider (interfaz) Representa un intervalo de texto en un


proveedor de texto (consulte
ITextRangeProvider).

Clase Contiene valores que se usan como


System.Windows.Automation.TextPatternIdentifiers identificadores para los proveedores de
texto (consulte TextPatternIdentifiers).

Seguridad
La arquitectura de la automatización de la interfaz de usuario se diseñó teniendo en
cuenta la seguridad (consulte Información general sobre la seguridad de la
automatización de la interfaz de usuario). Sin embargo, las clases TextPattern descritas
en este artículo requieren algunas consideraciones de seguridad específicas.

Los proveedores de texto de la automatización de la interfaz de usuario de


Microsoft proporcionan interfaces de solo lectura y no proporcionan la capacidad
de cambiar el texto existente en un control.

Los clientes de la automatización de la interfaz de usuario solo pueden usar la


automatización de la interfaz de usuario de Microsoft si son de plena "confianza".
Un ejemplo de esto sería el escritorio de inicio de sesión protegido, donde tan solo
pueden ejecutarse aplicaciones conocidas y de confianza.

Los desarrolladores de proveedores de automatización de la interfaz de usuario


deben tener en cuenta que toda la información que elijan exponer en sus controles
mediante la automatización de la interfaz de usuario de Microsoft es básicamente
pública y totalmente accesible por otro código. La automatización de la interfaz de
usuario de Microsoft no hace ningún esfuerzo para determinar la confiabilidad de
ningún cliente de automatización de la interfaz de usuario y, por tanto, el
proveedor de automatización de la interfaz de usuario no debe exponer
información textual confidencial o contenido protegido (por ejemplo, los campos
de contraseña).

Uno de los cambios más importantes en la seguridad de Windows Vista se conoce


ampliamente como "Entrada segura" y abarca tecnologías tales como las cuentas
de usuario de privilegios mínimos(o limitados) (LUA) y el aislamiento de nivel de
privilegios de interfaz de usuario (UIPI).

UIPI evita que un programa controle o supervise otro programa “con más
privilegios”, lo que impide los ataques de mensajes de ventanas entre procesos
que suplantan la entrada de los usuarios.

LUA establece límites en los privilegios de las aplicaciones ejecutadas por los
usuarios del grupo Administradores. Las aplicaciones no tienen necesariamente
privilegios de administrador, sino que en su lugar se ejecutarán con los
privilegios mínimos necesarios. Como consecuencia, puede haber algunas
restricciones que se apliquen en escenarios LUA. En particular, el truncamiento
de cadenas (incluidas cadenas TextPattern), donde puede ser necesario limitar el
tamaño de las cadenas que se recuperan desde las aplicaciones de nivel de
administrador, de modo que no se vean obligadas a asignar memoria hasta el
punto de deshabilitar la aplicación.

Rendimiento
Dado la mayor parte de la funcionalidad de TextPattern se basa en las llamadas entre
procesos, no proporciona un mecanismo de almacenamiento en caché para mejorar el
rendimiento al procesar el contenido. Esto es diferente a otros patrones de control de la
automatización de la interfaz de usuario de Microsoft a los que se puede tener acceso
mediante los métodos GetCachedPattern o TryGetCachedPattern.

Una táctica para mejorar el rendimiento es asegurarse de que los clientes de


automatización de la interfaz de usuario intentan recuperar bloques de texto de tamaño
moderado con GetText. Por ejemplo, las llamadas a GetText(1) incurrirán en varios
resultados entre procesos para cada carácter, mientras que una llamada a GetText (-1)
incurrirá en un solo resultado entre procesos, pero puede tener una latencia elevada
según el tamaño del proveedor de texto.
Terminología de TextPattern
Atributo
Es una característica de formato de un intervalo de texto (por ejemplo, IsItalicAttribute o
FontNameAttribute).

Intervalo degenerado
Un intervalo degenerado es un intervalo de texto vacío o con cero caracteres. Para los
fines del patrón de control TextPattern, el punto de inserción de texto (o símbolo de
inserción) se considera un intervalo degenerado. Si no hay texto seleccionado,
GetSelection devolverá un intervalo degenerado en el punto de inserción de texto y
RangeFromPoint devolverá un intervalo degenerado como extremo inicial.
RangeFromChild y GetVisibleRanges pueden devolver intervalos degenerados cuando el
proveedor de texto no encuentra ningún intervalo de texto que coincida con la
condición especificada. Este intervalo degenerado puede usarse como extremo inicial
dentro del proveedor de texto. FindText y FindAttribute devuelven una referencia nula
( Nothing en Microsoft Visual Basic .NET) para evitar la confusión entre un intervalo
descubierto y un intervalo degenerado.

Objeto incrustado
Hay dos tipos de objetos insertados en el modelo de texto de la automatización de la
interfaz de usuario. que están formados por elementos de contenido basado en texto,
como hipervínculos o tablas, y elementos de control, como imágenes y botones. Para
información detallada, vea Access Embedded Objects Using UI Automation.

Punto de conexión
Es el punto Start o End absoluto de un intervalo de texto dentro de un contenedor de
texto.

A continuación, se muestra un conjunto de puntos


iniciales y finales.

TextRange
Es una representación de un intervalo de texto, con puntos de inicio y final, en un
contenedor de texto que incluye todos los atributos y la funcionalidad asociados.

TextUnit
Unidad predefinida de texto (carácter, palabra, línea o párrafo) usada para navegar por
los segmentos lógicos de un intervalo de texto.

Consulte también
Patrones de controles de UI Automation para clientes
Información general acerca de los patrones de control de UI Automation
Información general sobre el árbol de la UI Automation
Utilizar el almacenamiento en caché en la UI Automation
Patrones de control compatibles en un proveedor de UI Automation
Asignación de patrones de controles para clientes de UI Automation
Text Services Framework (TSF)
Información general sobre TextPattern y
objetos incrustados
Artículo • 08/04/2023

7 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 describe cómo Automatización de la interfaz de usuario de Microsoft


expone objetos insertados o elementos secundarios en un contenedor o documento de
texto.

En Automatización de la interfaz de usuario, un objeto insertado es cualquier elemento


que tenga límites no textuales; por ejemplo, una imagen, un hipervínculo, una tabla o un
tipo de documento como una hoja de cálculo de Microsoft Excel o un archivo de
Windows Media de Microsoft. Esto difiere de la definición estándar, según la cual se
crea un elemento en una aplicación y se incrusta o vincula en otra. Si el objeto se puede
editar en la aplicación original, es irrelevante en el contexto de Automatización de la
interfaz de usuario.

Objetos incrustados y el árbol de


automatización de la interfaz de usuario
Los objetos insertados se tratan como elementos individuales en la vista de control del
árbol de Automatización de la interfaz de usuario. Se exponen como elementos
secundarios del contenedor de texto para que resulten accesibles con el mismo modelo
que otros controles en Automatización de la interfaz de usuario.
Ejemplo de un contenedor de
texto con objetos insertados de tabla, imagen e hipervínculo

Ejemplo de la vista de
contenido de una parte del contenedor de texto anterior

Exponer objetos incrustados con TextPattern y


TextPatternRange
Si se usan de forma conjunta, la clase de patrón de control de TextPattern y la clase
TextPatternRange exponen métodos y propiedades que facilitan la navegación y la
consulta de los objetos incrustados.

El contenido textual (o texto interno) de un contenedor de texto y un objeto incrustado,


como un hipervínculo o una celda de tabla, se expone como una secuencia de texto
continua única en las vistas de control y contenido del árbol de Automatización de la
interfaz de usuario. Los límites del objeto se ignoran. Si un cliente de Automatización de
la interfaz de usuario recupera el texto con el objetivo de realizar alguna declaración,
interpretarlo o analizarlo de alguna manera, el intervalo de texto se debe comprobar en
los casos especiales (por ejemplo, una tabla con contenido textual u otros objetos
incrustados). Para ello, puede llamar a GetChildren para obtener un AutomationElement
para cada objeto incrustado y, a continuación, llamar a RangeFromChild para obtener
un intervalo de texto para cada elemento. Esto se realiza recursivamente hasta que se
recupera todo el contenido textual.
Ejemplo de una
secuencia de texto con objetos insertados y sus distribuciones de intervalos

Cuando es necesario atravesar el contenido de un intervalo de texto, se realizan en


segundo plano una serie de pasos para que el método Move pueda ejecutarse
correctamente.

1. El intervalo de texto se normaliza, es decir, se contrae, en un intervalo degenerado


en el extremo Start , y el extremo End queda superfluo. Este paso es necesario para
quitar la ambigüedad en situaciones en las que un intervalo de texto abarca límites
de TextUnit: por ejemplo, {The URL https://www.microsoft.com is embedded in
text donde "{ " y "} " son los puntos de conexión del intervalo de texto.

2. El intervalo resultante se mueve hacia atrás en DocumentRange , al principio del


límite TextUnit solicitado.

3. El intervalo resultante se mueve hacia delante o hacia atrás en DocumentRange ,


en función del número solicitado de límites TextUnit .

4. A continuación, el intervalo se expande desde un estado de intervalo degenerado


moviendo el extremo End en función de un límite TextUnit solicitado.

Ejemplos de cómo se
ajusta un intervalo de texto para Move() y ExpandToEnclosingUnit()
Escenarios comunes
Las secciones siguientes muestran ejemplos de los escenarios más comunes que
incluyen objetos incrustados.

Leyenda para los ejemplos que se muestran:

{ = Start

} = End

Hyperlink
Ejemplo 1: intervalo de texto que contiene un hipervínculo de texto incrustado

{The URL https://www.microsoft.com is embedded in text}.

Método al que se llama Resultado

GetText Devuelve la cadena The URL https://www.microsoft.com is


embedded in text .

GetEnclosingElement Devuelve el elemento AutomationElement más interno que


incluye el intervalo de texto (en este caso, el elemento
AutomationElement que representa al propio proveedor de
texto).

GetChildren Devuelve un elemento AutomationElement que representa


el control de hipervínculo.

RangeFromChild , donde Devuelve el intervalo que representa


AutomationElement es el objeto https://www.microsoft.com .
que ha devuelto el método
GetChildren anterior.

Ejemplo 2: intervalo de texto que se extiende parcialmente por un hipervínculo de


texto incrustado

La dirección URL https://{[www]} está insertada en el texto.

Método al que se Resultado


llama

GetText Devuelve la cadena "www".

GetEnclosingElement Devuelve el elemento AutomationElement más interno que incluye el


intervalo de texto (en este caso, el control de hipervínculo).
Método al que se Resultado
llama

GetChildren Devuelve null , ya que el intervalo de texto no se extiende por toda la


cadena de dirección URL.

Ejemplo 3: intervalo de texto que se extiende parcialmente por el contenido de un


contenedor de texto. El contenedor de texto incluye un hipervínculo de texto
incrustado que no forma parte del intervalo de texto.

{The URL} [https://www.microsoft.com](https://www.microsoft.com) is embedded in

text.

Método al que se Resultado


llama

GetText Devuelve la cadena "La dirección URL".

GetEnclosingElement Devuelve el elemento AutomationElement más interno que incluye el


intervalo de texto (en este caso, el elemento AutomationElement que
representa al propio proveedor de texto).

Move con Mueve el intervalo de texto a "http", ya que el texto del hipervínculo se
parámetros de compone de palabras individuales. En este caso, el hipervínculo no se
(TextUnit.Word, 1). considera un único objeto.

La dirección URL {[http]} está insertada en el texto.

Imagen
Ejemplo 1: intervalo de texto que contiene una imagen incrustada

{La imagen está insertada en el texto}.

Método al que se llama Resultado

GetText Devuelve la cadena "La está incrustada en el texto". No se


puede esperar que se incluya en la secuencia de texto el
texto alternativo asociado con la imagen.
Método al que se llama Resultado

GetEnclosingElement Devuelve el elemento AutomationElement más interno que


incluye el intervalo de texto (en este caso, el elemento
AutomationElement que representa al propio proveedor de
texto).

GetChildren Devuelve un elemento AutomationElement que representa


el control de imagen.

RangeFromChild , donde Devuelve el intervalo degenerado que representa "


AutomationElement es el objeto
que ha devuelto el método
GetChildren anterior.

".

Ejemplo 2: intervalo de texto que se extiende parcialmente por el contenido de un


contenedor de texto. El contenedor de texto incluye una imagen incrustada que no
forma parte del intervalo de texto.

{La imagen} está insertada en el texto.

Método al que se Resultado


llama

GetText Devuelve la cadena "La imagen".

GetEnclosingElement Devuelve el elemento AutomationElement más interno que incluye el


intervalo de texto (en este caso, el elemento AutomationElement que
representa al propio proveedor de texto).

Move con Mueve el intervalo de texto a "está". Dado que solo se consideran parte
parámetros de de la secuencia de texto los objetos incrustados basados en texto, la
(TextUnit.Word, 1). imagen de este ejemplo no afecta a Move ni al valor que devuelve (en
este caso, 1).

Tabla

Tabla que se ha usado en los ejemplos:

Celda con imagen Celda con texto


Celda con imagen Celda con texto

esté

Imagen para Z

Ejemplo 1: obtener el contenedor de texto del contenido de una celda.

Método al que se llama Resultado

GetItem con parámetros (0,0) Devuelve el elemento AutomationElement que representa


el contenido de la celda de tabla (en este caso, el
elemento es un control de texto).

RangeFromChild , donde
AutomationElement es el objeto que
ha devuelto el método GetItem
anterior.

Devuelve el intervalo que abarca la imagen .

GetEnclosingElement para el objeto Devuelve el elemento AutomationElement que representa


que ha devuelto el método la celda de tabla (en este caso, el elemento es un control
RangeFromChild anterior. de texto que admite TableItemPattern).

GetEnclosingElement para el objeto Devuelve el elemento AutomationElement que representa


que ha devuelto el método la tabla.
GetEnclosingElement anterior.

GetEnclosingElement para el objeto Devuelve el elemento AutomationElement que representa


que ha devuelto el método al propio proveedor de texto.
GetEnclosingElement anterior.

Ejemplo 2: obtener el contenido de texto de una celda.


Método al que se llama Resultado

GetItem con parámetros de (1,1). Devuelve el elemento AutomationElement que


representa el contenido de la celda de tabla (en este
caso, el elemento es un control de texto).

RangeFromChild , donde Devuelve "Y".


AutomationElement es el objeto que ha
devuelto el método GetItem anterior.

Consulte también
TextPattern
TextPatternRange
ITextProvider
ITextRangeProvider
Acceso a objetos incrustados mediante la UI Automation
Exponer el contenido de una tabla mediante UI Automation
Recorrer texto mediante usando UI Automation
Ejemplo de búsqueda y selección de TextPattern
Temas de procedimientos acerca del
modelo de texto de UI Automation
Artículo • 10/05/2023

7 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 esta sección se incluyen temas que explican cómo usar el patrón de texto
Automatización de la interfaz de usuario.

En esta sección
Agregar contenido a un cuadro de texto mediante Automatización de la interfaz de
usuarioBuscar y resaltar texto mediante Automatización de la interfaz de
usuarioObtener atributos de texto mediante Automatización de la interfaz de
usuarioObtener detalles de atributo de texto mixtos mediante Automatización de la
interfaz de usuarioRecorrer teto mediante Automatización de la interfaz de
usuarioAcceder a objetos insertados mediante Automatización de la interfaz de usuario
Agregar contenido a un cuadro de texto
utilizando la UI Automation
Artículo • 10/05/2023

7 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.

Este tema contiene código de ejemplo que muestra cómo usar Microsoft UI Automation
para insertar texto en un cuadro de texto de una sola línea. Se proporciona un método
alternativo para los controles de texto enriquecido y de varias líneas en los que no se
aplica UI Automation. Con fines de comparación, el ejemplo también muestra cómo
usar métodos Win32 para lograr los mismos resultados.

Ejemplo
En el ejemplo siguiente se describe una secuencia de controles de texto en una
aplicación de destino. Cada control de texto se prueba para ver si se puede obtener un
objeto ValuePattern con el método TryGetCurrentPattern. Si el control de texto admite
ValuePattern, el método SetValue se usa para insertar una cadena definida por el usuario
en el control de texto. De lo contrario, el método SendKeys.SendWait se compila
mediante JIT.

C#

///--------------------------------------------------------------------
/// <summary>
/// Sets the values of the text controls using managed methods.
/// </summary>
/// <param name="s">The string to be inserted.</param>
///--------------------------------------------------------------------
private void SetValueWithUIAutomation(string s)
{
foreach (AutomationElement control in textControls)
{
InsertTextUsingUIAutomation(control, s);
}
}
///--------------------------------------------------------------------
/// <summary>
/// Inserts a string into each text control of interest.
/// </summary>
/// <param name="element">A text control.</param>
/// <param name="value">The string to be inserted.</param>
///--------------------------------------------------------------------
private void InsertTextUsingUIAutomation(AutomationElement element,
string value)
{
try
{
// Validate arguments / initial setup
if (value == null)
throw new ArgumentNullException(
"String parameter must not be null.");

if (element == null)
throw new ArgumentNullException(
"AutomationElement parameter must not be null");

// A series of basic checks prior to attempting an insertion.


//
// Check #1: Is control enabled?
// An alternative to testing for static or read-only controls
// is to filter using
// PropertyCondition(AutomationElement.IsEnabledProperty, true)
// and exclude all read-only text controls from the collection.
if (!element.Current.IsEnabled)
{
throw new InvalidOperationException(
"The control with an AutomationID of "
+ element.Current.AutomationId.ToString()
+ " is not enabled.\n\n");
}

// Check #2: Are there styles that prohibit us


// from sending text to this control?
if (!element.Current.IsKeyboardFocusable)
{
throw new InvalidOperationException(
"The control with an AutomationID of "
+ element.Current.AutomationId.ToString()
+ "is read-only.\n\n");
}

// Once you have an instance of an AutomationElement,


// check if it supports the ValuePattern pattern.
object valuePattern = null;

// Control does not support the ValuePattern pattern


// so use keyboard input to insert content.
//
// NOTE: Elements that support TextPattern
// do not support ValuePattern and TextPattern
// does not support setting the text of
// multi-line edit or document controls.
// For this reason, text input must be simulated
// using one of the following methods.
//
if (!element.TryGetCurrentPattern(
ValuePattern.Pattern, out valuePattern))
{
feedbackText.Append("The control with an AutomationID of ")
.Append(element.Current.AutomationId.ToString())
.Append(" does not support ValuePattern.")
.AppendLine(" Using keyboard input.\n");

// Set focus for input functionality and begin.


element.SetFocus();

// Pause before sending keyboard input.


Thread.Sleep(100);

// Delete existing content in the control and insert new


content.
SendKeys.SendWait("^{HOME}"); // Move to start of control
SendKeys.SendWait("^+{END}"); // Select everything
SendKeys.SendWait("{DEL}"); // Delete selection
SendKeys.SendWait(value);
}
// Control supports the ValuePattern pattern so we can
// use the SetValue method to insert content.
else
{
feedbackText.Append("The control with an AutomationID of ")
.Append(element.Current.AutomationId.ToString())
.Append((" supports ValuePattern."))
.AppendLine(" Using ValuePattern.SetValue().\n");

// Set focus for input functionality and begin.


element.SetFocus();

((ValuePattern)valuePattern).SetValue(value);
}
}
catch (ArgumentNullException exc)
{
feedbackText.Append(exc.Message);
}
catch (InvalidOperationException exc)
{
feedbackText.Append(exc.Message);
}
finally
{
Feedback(feedbackText.ToString());
}
}
Consulte también
TextPattern Insert Text Sample
Buscar y resaltar texto mediante UI
Automation
Artículo • 09/05/2023

7 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 buscar y resaltar secuencialmente cada aparición de una
cadena dentro del contenido de un control de texto mediante Microsoft Automatización
de la interfaz de usuario.

Ejemplo
En el ejemplo siguiente se obtiene un TextPattern objeto de un control de texto. A
continuación, se crea un objeto TextPatternRange que representa el contenido textual
de todo el documento mediante la propiedad DocumentRange de este objeto
TextPattern. A continuación, se crean dos objetos adicionales TextPatternRange para la
funcionalidad de búsqueda secuencial y resaltado.

C#

///--------------------------------------------------------------------
/// <summary>
/// Starts the target application.
/// </summary>
/// <param name="app">
/// The application to start.
/// </param>
/// <returns>The automation element for the app main window.</returns>
/// <remarks>
/// Three WPF documents, a rich text document, and a plain text document
/// are provided in the Content folder of the TextProvider project.
/// </remarks>
///--------------------------------------------------------------------
private AutomationElement StartApp(string app)
{
// Start application.
Process p = Process.Start(app);
// Give the target application some time to start.
// For Win32 applications, WaitForInputIdle can be used instead.
// Another alternative is to listen for WindowOpened events.
// Otherwise, an ArgumentException results when you try to
// retrieve an automation element from the window handle.
Thread.Sleep(2000);

targetResult.Content =
WPFTarget +
" started. \n\nPlease load a document into the target " +
"application and click the 'Find edit control' button above. " +
"\n\nNOTE: Documents can be found in the 'Content' folder of the
FindText project.";
targetResult.Background = Brushes.LightGreen;

// Return the automation element for the app main window.


return (AutomationElement.FromHandle(p.MainWindowHandle));
}

C#

///--------------------------------------------------------------------
/// <summary>
/// Finds the text control in our target.
/// </summary>
/// <param name="src">The object that raised the event.</param>
/// <param name="e">Event arguments.</param>
/// <remarks>
/// Initializes the TextPattern object and event handlers.
/// </remarks>
///--------------------------------------------------------------------
private void FindTextProvider_Click(object src, RoutedEventArgs e)
{
// Set up the conditions for finding the text control.
PropertyCondition documentControl = new PropertyCondition(
AutomationElement.ControlTypeProperty,
ControlType.Document);
PropertyCondition textPatternAvailable = new PropertyCondition(
AutomationElement.IsTextPatternAvailableProperty, true);
AndCondition findControl =
new AndCondition(documentControl, textPatternAvailable);

// Get the Automation Element for the first text control found.
// For the purposes of this sample it is sufficient to find the
// first text control. In other cases there may be multiple text
// controls to sort through.
targetDocument =
targetWindow.FindFirst(TreeScope.Descendants, findControl);

// Didn't find a text control.


if (targetDocument == null)
{
targetResult.Content =
WPFTarget +
" does not contain a Document control type.";
targetResult.Background = Brushes.Salmon;
startWPFTargetButton.IsEnabled = false;
return;
}

// Get required control patterns


targetTextPattern =
targetDocument.GetCurrentPattern(
TextPattern.Pattern) as TextPattern;

// Didn't find a text control that supports TextPattern.


if (targetTextPattern == null)
{
targetResult.Content =
WPFTarget +
" does not contain an element that supports TextPattern.";
targetResult.Background = Brushes.Salmon;
startWPFTargetButton.IsEnabled = false;
return;
}

// Text control is available so display the client controls.


infoGrid.Visibility = Visibility.Visible;

targetResult.Content =
"Text provider found.";
targetResult.Background = Brushes.LightGreen;

// Initialize the document range for the text of the document.


documentRange = targetTextPattern.DocumentRange;

// Initialize the client's search buttons.


if (targetTextPattern.DocumentRange.GetText(1).Length > 0)
{
searchForwardButton.IsEnabled = true;
}
// Initialize the client's search TextBox.
searchString.IsEnabled = true;

// Check if the text control supports text selection


if (targetTextPattern.SupportedTextSelection ==
SupportedTextSelection.None)
{
targetResult.Content = "Unable to select text.";
targetResult.Background = Brushes.Salmon;
return;
}

// Edit control found so remove the find button from the client.
findEditButton.Visibility = Visibility.Collapsed;

// Initialize the client with the current target selection, if any.


NotifySelectionChanged();

// Search starts at beginning of doc and goes forward


searchBackward = false;

// Initialize a text changed listener.


// An instance of TextPatternRange will become invalid if
// one of the following occurs:
// 1) The text in the provider changes via some user activity.
// 2) ValuePattern.SetValue is used to programmatically change
// the value of the text in the provider.
// The only way the client application can detect if the text
// has changed (to ensure that the ranges are still valid),
// is by setting a listener for the TextChanged event of
// the TextPattern. If this event is raised, the client needs
// to update the targetDocumentRange member data to ensure the
// user is working with the updated text.
// Clients must always anticipate the possibility that the text
// can change underneath them.
Automation.AddAutomationEventHandler(
TextPattern.TextChangedEvent,
targetDocument,
TreeScope.Element,
TextChanged);

// Initialize a selection changed listener.


// The target selection is reflected in the client.
Automation.AddAutomationEventHandler(
TextPattern.TextSelectionChangedEvent,
targetDocument,
TreeScope.Element,
OnTextSelectionChange);
}

C#

///--------------------------------------------------------------------
/// <summary>
/// Handles changes to the search text in the client.
/// </summary>
/// <param name="sender">The object that raised the event.</param>
/// <param name="e">Event arguments.</param>
/// <remarks>
/// Reset all controls if user changes search text
/// </remarks>
///--------------------------------------------------------------------
void SearchString_Change(object sender, TextChangedEventArgs e)
{
int startPoints = documentRange.CompareEndpoints(
TextPatternRangeEndpoint.Start,
searchRange,
TextPatternRangeEndpoint.Start);
int endPoints = documentRange.CompareEndpoints(
TextPatternRangeEndpoint.End,
searchRange,
TextPatternRangeEndpoint.End);

// If the starting endpoints of the document range and the search


// range are equivalent then we can search forward only since the
// search range is at the start of the document.
if (startPoints == 0)
{
searchForwardButton.IsEnabled = true;
searchBackwardButton.IsEnabled = false;
}
// If the ending endpoints of the document range and the search
// range are identical then we can search backward only since the
// search range is at the end of the document.
else if (endPoints == 0)
{
searchForwardButton.IsEnabled = false;
searchBackwardButton.IsEnabled = true;
}
// Otherwise we can search both directions.
else
{
searchForwardButton.IsEnabled = true;
searchBackwardButton.IsEnabled = true;
}
}

///--------------------------------------------------------------------
/// <summary>
/// Handles the Search button click.
/// </summary>
/// <param name="sender">The object that raised the event.</param>
/// <param name="e">Event arguments.</param>
/// <remarks>Find the text specified in the text box.</remarks>
///--------------------------------------------------------------------
void SearchDirection_Click(object sender, RoutedEventArgs e)
{
Button searchDirection = (Button)sender;

// Are we searching backward through the text control?


searchBackward =
((traversalDirection)searchDirection.Tag ==
traversalDirection.Backward);

// Check if search text entered


if (searchString.Text.Trim() == "")
{
targetResult.Content = "No search criteria.";
targetResult.Background = Brushes.Salmon;
return;
}

// Does target range support text selection?


if (targetTextPattern.SupportedTextSelection ==
SupportedTextSelection.None)
{
targetResult.Content = "Unable to select text.";
targetResult.Background = Brushes.Salmon;
return;
}
// Does target range support multiple selections?
if (targetTextPattern.SupportedTextSelection ==
SupportedTextSelection.Multiple)
{
targetResult.Content = "Multiple selections present.";
targetResult.Background = Brushes.Salmon;
return;
}

// Clone the document range since we modify the endpoints


// as we search.
TextPatternRange documentRangeClone = documentRange.Clone();

// Move the cloned document range endpoints to enable the


// selection of the next matching text range.
TextPatternRange[] selectionRange =
targetTextPattern.GetSelection();
if (selectionRange[0] != null)
{
if (searchBackward)
{
documentRangeClone.MoveEndpointByRange(
TextPatternRangeEndpoint.End,
selectionRange[0],
TextPatternRangeEndpoint.Start);
}
else
{
documentRangeClone.MoveEndpointByRange(
TextPatternRangeEndpoint.Start,
selectionRange[0],
TextPatternRangeEndpoint.End);
}
}

// Find the text specified in the Search textbox.


// Clone the search range since we need to modify it.
TextPatternRange searchRangeClone = searchRange.Clone();
// backward = false? -- search forward, otherwise backward.
// ignoreCase = false? -- search is case sensitive.
searchRange =
documentRangeClone.FindText(
searchString.Text, searchBackward, false);

// Search unsuccessful.
if (searchRange == null)
{
// Search string not found at all.
if (documentRangeClone.CompareEndpoints(
TextPatternRangeEndpoint.Start,
searchRangeClone,
TextPatternRangeEndpoint.Start) == 0)
{
targetResult.Content = "Text not found.";
targetResult.Background = Brushes.Wheat;
searchBackwardButton.IsEnabled = false;
searchForwardButton.IsEnabled = false;
}
// End of document (either the start or end of the document
// range depending on search direction) was reached before
// finding another occurrence of the search string.
else
{
targetResult.Content = "End of document reached.";
targetResult.Background = Brushes.Wheat;
if (!searchBackward)
{
searchRangeClone.MoveEndpointByRange(
TextPatternRangeEndpoint.Start,
documentRange,
TextPatternRangeEndpoint.End);
searchBackwardButton.IsEnabled = true;
searchForwardButton.IsEnabled = false;
}
else
{
searchRangeClone.MoveEndpointByRange(
TextPatternRangeEndpoint.End,
documentRange,
TextPatternRangeEndpoint.Start);
searchBackwardButton.IsEnabled = false;
searchForwardButton.IsEnabled = true;
}
}
searchRange = searchRangeClone;
}
// The search string was found.
else
{
targetResult.Content = "Text found.";
targetResult.Background = Brushes.LightGreen;
}

searchRange.Select();
// Scroll the selection into view and align with top of viewport
searchRange.ScrollIntoView(true);
// The WPF target doesn't show selected text as highlighted unless
// the window has focus.
targetWindow.SetFocus();
}
Consulte también
Buscar y resaltar texto mediante UI Automation
Obtener atributos de texto mediante UI
Automation
Artículo • 10/05/2023

7 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 usar Automatización de la interfaz de usuario de


Microsoft para obtener atributos de texto de un rango de texto. Un intervalo de texto
puede corresponder a la ubicación actual del símbolo de intercalación (o selección
degenerada) dentro de un documento, una selección contigua de texto, una colección
de selecciones de textos inconexos o todo el contenido textual de un documento.

Ejemplo
En el ejemplo de código siguiente se muestra cómo obtener el valor FontNameAttribute
de un intervalo de texto.

C#

/// -------------------------------------------------------------------
/// <summary>
/// Starts the target application and returns the AutomationElement
/// obtained from the targets window handle.
/// </summary>
/// <param name="exe">
/// The target application.
/// </param>
/// <param name="filename">
/// The text file to be opened in the target application
/// </param>
/// <returns>
/// An AutomationElement representing the target application.
/// </returns>
/// -------------------------------------------------------------------
private AutomationElement StartTarget(string exe, string filename)
{
// Start text editor and load with a text file.
Process p = Process.Start(exe, filename);

// targetApp --> the root AutomationElement.


AutomationElement targetApp =
AutomationElement.FromHandle(p.MainWindowHandle);

return targetApp;
}

C#

/// -------------------------------------------------------------------
/// <summary>
/// Obtain the text control of interest from the target application.
/// </summary>
/// <param name="targetApp">
/// The target application.
/// </param>
/// <returns>
/// An AutomationElement that represents a text provider..
/// </returns>
/// -------------------------------------------------------------------
private AutomationElement GetTextElement(AutomationElement targetApp)
{
// The control type we're looking for; in this case 'Document'
PropertyCondition cond1 =
new PropertyCondition(
AutomationElement.ControlTypeProperty,
ControlType.Document);

// The control pattern of interest; in this case 'TextPattern'.


PropertyCondition cond2 =
new PropertyCondition(
AutomationElement.IsTextPatternAvailableProperty,
true);

AndCondition textCondition = new AndCondition(cond1, cond2);

AutomationElement targetTextElement =
targetApp.FindFirst(TreeScope.Descendants, textCondition);

// If targetText is null then a suitable text control was not found.


return targetTextElement;
}

C#

/// -------------------------------------------------------------------
/// <summary>
/// Outputs the FontNameAttribute value for a range of text.
/// </summary>
/// <param name="targetTextElement">
/// The AutomationElement that represents a text control.
/// </param>
/// -------------------------------------------------------------------
private void GetFontNameAttribute(AutomationElement targetTextElement)
{
TextPattern textPattern =
targetTextElement.GetCurrentPattern(TextPattern.Pattern) as
TextPattern;

if (textPattern == null)
{
// Target control doesn't support TextPattern.
return;
}

// If the target control doesn't support selection then return.


// Otherwise, get the text attribute for the selected text.
// If there are currently no selections then the text attribute
// will be obtained from the insertion point.
TextPatternRange[] textRanges;
if (textPattern.SupportedTextSelection == SupportedTextSelection.None)
{
return;
}
else
{
textRanges = textPattern.GetSelection();
}

foreach (TextPatternRange textRange in textRanges)


{
Object textAttribute =
textRange.GetAttributeValue(
TextPattern.FontNameAttribute);

if (textAttribute == TextPattern.MixedAttributeValue)
{
// Returns MixedAttributeValue if the value of the
// specified attribute varies over the text range.
Console.WriteLine("Mixed fonts.");
}
else if (textAttribute == AutomationElement.NotSupported)
{
// Returns NotSupported if the specified attribute is
// not supported by the provider or the control.
Console.WriteLine(
"FontNameAttribute not supported by provider.");
}
else
{
Console.WriteLine(textAttribute.ToString());
}
}
}
El patrón de control TextPattern , junto con la clase TextPatternRange , admite atributos
de texto básicos, propiedades y métodos. Para la funcionalidad específica del control
que no es compatible con TextPattern ni TextPatternRange , la clase
AutomationElementofrece métodos para que un cliente de Automatización de la
interfaz de usuario acceda al modelo de objeto nativo correspondiente.

Consulte también
Información general sobre el modelo de texto de UI Automation
Agregar contenido a un cuadro de texto utilizando la UI Automation
Buscar y resaltar texto mediante UI Automation
Información general acerca de los patrones de control de UI Automation
Patrones de controles de UI Automation para clientes
Obtener detalles de atributos de texto diversos mediante UI Automation
Obtener detalles de atributos de texto
diversos mediante UI Automation
Artículo • 10/05/2023

7 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 usar Microsoft UI Automation para obtener detalles de
atributos de texto de un intervalo de texto que abarca varios valores de atributo. Un
intervalo de texto puede corresponder a la ubicación actual del símbolo de intercalación
(o selección degenerada) dentro de un documento, una selección contigua de texto,
una colección de selecciones de textos inconexos o todo el contenido textual de un
documento.

Ejemplo
En el ejemplo de código siguiente se muestra cómo obtener el valor FontNameAttribute
de un intervalo de texto donde GetAttributeValue devuelve un objeto
MixedAttributeValue .

C#

///--------------------------------------------------------------------
/// <summary>
/// Display the target selection with attribute details in client.
/// </summary>
/// <param name="selectedText">The current target selection.</param>
///--------------------------------------------------------------------
private void DisplaySelectedTextWithAttributes(string selectedText)
{
targetSelection.Text = selectedText;
// We're only interested in the FontNameAttribute for the purposes
// of this sample.
targetSelectionAttributes.Text =
ParseTextRangeByAttribute(
selectedText, TextPattern.FontNameAttribute);
}
///--------------------------------------------------------------------
/// <summary>
/// Parse the target selection based on the text attribute of interest.
/// </summary>
/// <param name="selectedText">The current target selection.</param>
/// <param name="automationTextAttribute">
/// The text attribute of interest.
/// </param>
/// <returns>
/// A string representing the requested attribute details.
/// </returns>
///--------------------------------------------------------------------
private string ParseTextRangeByAttribute(
string selectedText,
AutomationTextAttribute automationTextAttribute)
{
StringBuilder attributeDetails = new StringBuilder();
// Initialize the current attribute value.
string attributeValue = "";
// Make a copy of the text range.
TextPatternRange searchRangeClone = searchRange.Clone();
// Collapse the range to the starting endpoint.
searchRangeClone.Move(TextUnit.Character, -1);
// Iterate through the range character by character.
for (int x = 1; x <= selectedText.Length; x++)
{
searchRangeClone.Move(TextUnit.Character, 1);
// Get the attribute value of the current character.
string newAttributeValue =

searchRangeClone.GetAttributeValue(automationTextAttribute).ToString();
// If the new attribute value is not equal to the old then report
// the new value along with its location within the range.
if (newAttributeValue != attributeValue)
{

attributeDetails.Append(automationTextAttribute.ProgrammaticName)
.Append(":\n<")
.Append(newAttributeValue)
.Append("> at text range position ")
.AppendLine(x.ToString());
attributeValue = newAttributeValue;
}
}
return attributeDetails.ToString();
}

El patrón de control TextPattern , junto con la clase TextPatternRange , admite atributos


de texto básicos, propiedades y métodos. Para la funcionalidad específica del control
que no es compatible con TextPattern ni TextPatternRange, la clase AutomationElement
ofrece métodos para que un cliente de Automatización de la interfaz de usuario acceda
al modelo de objeto nativo correspondiente.

Consulte también
Información general sobre el modelo de texto de UI Automation
Agregar contenido a un cuadro de texto utilizando la UI Automation
Buscar y resaltar texto mediante UI Automation
Información general acerca de los patrones de control de UI Automation
Patrones de controles de UI Automation para clientes
Obtener atributos de texto mediante UI Automation
Recorrer texto mediante usando UI
Automation
Artículo • 10/05/2023

7 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 usar la automatización de la interfaz de usuario de


Microsoft para recorrer el contenido textual de un documento en incrementos TextUnit.

Ejemplo
En el ejemplo de código siguiente se muestra cómo recorrer el contenido de un
proveedor de texto de automatización de la interfaz de usuario. El método Move mueve
Start y los extremos End de un TextPatternRange. Este intervalo de texto suele ser un
intervalo degenerado que representa el punto de inserción de texto.

7 Nota

Puesto que solo se consideran parte de la secuencia de texto los objetos


incrustados basados en texto, los objetos incrustados como imágenes no afectan a
Move o su valor devuelto.

C#

///--------------------------------------------------------------------
/// <summary>
/// Starts the target application.
/// </summary>
/// <param name="app">
/// The application to start.
/// </param>
/// <returns>The automation element for the app main window.</returns>
/// <remarks>
/// Three WPF documents, a rich text document, and a plain text document
/// are provided in the Content folder of the TextProvider project.
/// </remarks>
///--------------------------------------------------------------------
private AutomationElement StartApp(string app)
{
// Start application.
Process p = Process.Start(app);

// Give the target application some time to start.


// For Win32 applications, WaitForInputIdle can be used instead.
// Another alternative is to listen for WindowOpened events.
// Otherwise, an ArgumentException results when you try to
// retrieve an automation element from the window handle.
Thread.Sleep(2000);

targetResult.Content =
WPFTarget +
" started. \n\nPlease load a document into the target " +
"application and click the 'Find edit control' button above. " +
"\n\nNOTE: Documents can be found in the 'Content' folder of the
FindText project.";
targetResult.Background = Brushes.LightGreen;

// Return the automation element for the app main window.


return (AutomationElement.FromHandle(p.MainWindowHandle));
}

C#

///--------------------------------------------------------------------
/// <summary>
/// Finds the text control in our target.
/// </summary>
/// <param name="src">The object that raised the event.</param>
/// <param name="e">Event arguments.</param>
/// <remarks>
/// Initializes the TextPattern object and event handlers.
/// </remarks>
///--------------------------------------------------------------------
private void FindTextProvider_Click(object src, RoutedEventArgs e)
{
// Set up the conditions for finding the text control.
PropertyCondition documentControl = new PropertyCondition(
AutomationElement.ControlTypeProperty,
ControlType.Document);
PropertyCondition textPatternAvailable = new PropertyCondition(
AutomationElement.IsTextPatternAvailableProperty, true);
AndCondition findControl =
new AndCondition(documentControl, textPatternAvailable);

// Get the Automation Element for the first text control found.
// For the purposes of this sample it is sufficient to find the
// first text control. In other cases there may be multiple text
// controls to sort through.
targetDocument =
targetWindow.FindFirst(TreeScope.Descendants, findControl);

// Didn't find a text control.


if (targetDocument == null)
{
targetResult.Content =
WPFTarget +
" does not contain a Document control type.";
targetResult.Background = Brushes.Salmon;
startWPFTargetButton.IsEnabled = false;
return;
}

// Get required control patterns


targetTextPattern =
targetDocument.GetCurrentPattern(
TextPattern.Pattern) as TextPattern;

// Didn't find a text control that supports TextPattern.


if (targetTextPattern == null)
{
targetResult.Content =
WPFTarget +
" does not contain an element that supports TextPattern.";
targetResult.Background = Brushes.Salmon;
startWPFTargetButton.IsEnabled = false;
return;
}

// Text control is available so display the client controls.


infoGrid.Visibility = Visibility.Visible;

targetResult.Content =
"Text provider found.";
targetResult.Background = Brushes.LightGreen;

// Initialize the document range for the text of the document.


documentRange = targetTextPattern.DocumentRange;

// Initialize the client's search buttons.


if (targetTextPattern.DocumentRange.GetText(1).Length > 0)
{
searchForwardButton.IsEnabled = true;
}
// Initialize the client's search TextBox.
searchString.IsEnabled = true;

// Check if the text control supports text selection


if (targetTextPattern.SupportedTextSelection ==
SupportedTextSelection.None)
{
targetResult.Content = "Unable to select text.";
targetResult.Background = Brushes.Salmon;
return;
}

// Edit control found so remove the find button from the client.
findEditButton.Visibility = Visibility.Collapsed;

// Initialize the client with the current target selection, if any.


NotifySelectionChanged();

// Search starts at beginning of doc and goes forward


searchBackward = false;

// Initialize a text changed listener.


// An instance of TextPatternRange will become invalid if
// one of the following occurs:
// 1) The text in the provider changes via some user activity.
// 2) ValuePattern.SetValue is used to programmatically change
// the value of the text in the provider.
// The only way the client application can detect if the text
// has changed (to ensure that the ranges are still valid),
// is by setting a listener for the TextChanged event of
// the TextPattern. If this event is raised, the client needs
// to update the targetDocumentRange member data to ensure the
// user is working with the updated text.
// Clients must always anticipate the possibility that the text
// can change underneath them.
Automation.AddAutomationEventHandler(
TextPattern.TextChangedEvent,
targetDocument,
TreeScope.Element,
TextChanged);

// Initialize a selection changed listener.


// The target selection is reflected in the client.
Automation.AddAutomationEventHandler(
TextPattern.TextSelectionChangedEvent,
targetDocument,
TreeScope.Element,
OnTextSelectionChange);
}

C#

///--------------------------------------------------------------------
/// <summary>
/// Handles the navigation item selected event.
/// </summary>
/// <param name="sender">The object that raised the event.</param>
/// <param name="e">Event arguments.</param>
///--------------------------------------------------------------------
private void NavigationUnit_Change(object sender, SelectionChangedEventArgs
e)
{
ComboBox cb = (ComboBox)sender;
navigationUnit = (TextUnit)cb.SelectedValue;
}

///--------------------------------------------------------------------
/// <summary>
/// Handles the Navigate button click event.
/// </summary>
/// <param name="sender">The object that raised the event.</param>
/// <param name="e">Event arguments.</param>
///--------------------------------------------------------------------
private void Navigate_Click(object sender, RoutedEventArgs e)
{
Button moveSelection = (Button)sender;

// Which direction is the user searching through the text control?


int navDirection =
((traversalDirection)moveSelection.Tag ==
traversalDirection.Forward) ? 1 : -1;

// Obtain the ranges to move.


TextPatternRange[] selectionRanges =
targetTextPattern.GetSelection();

// Iterate through the ranges for a text control that supports


// multiple selections and move the selections the specified text
// unit and direction.
foreach (TextPatternRange textRange in selectionRanges)
{
textRange.Move(navigationUnit, navDirection);
textRange.Select();
}
// The WPF target doesn't show selected text as highlighted unless
// the window has focus.
targetDocument.SetFocus();
}

Cualquier método que use TextUnit aplazará al siguiente TextUnit de mayor tamaño si el
control no admite el TextUnit determinado.

Consulte también
Información general sobre el modelo de texto de UI Automation
Agregar contenido a un cuadro de texto utilizando la UI Automation
Buscar y resaltar texto mediante UI Automation
Información general acerca de los patrones de control de UI Automation
Patrones de controles de UI Automation para clientes
Acceso a objetos incrustados mediante
la UI Automation
Artículo • 09/05/2023

7 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 puede utilizarse Automatización de la interfaz de usuario


de Microsoft para exponer objetos insertados en el contenido de un control de texto.

7 Nota

Los objetos incrustados pueden incluir imágenes, hipervínculos, botones, tablas o


controles ActiveX.

Los objetos insertados se consideran elementos secundarios del proveedor de texto de


Automatización de la interfaz de usuario. Esto permite que se puedan exponer mediante
la misma estructura de árbol de Automatización de la interfaz de usuario como todos
los demás elementos de la interfaz de usuario. La funcionalidad, a su vez, se expone a
través de los patrones de control que normalmente requiere el tipo de control de los
objetos incrustados (por ejemplo, como los hipervínculos están basados en texto,
admitirán TextPattern).

Documento de ejemplo con contenido textual ("¿Sabía


que...?") y dos objetos insertados (una imagen de una ballena y un hipervínculo de
texto), que se usan como destino para los ejemplos de código.
Ejemplo 1
En el ejemplo de código siguiente se muestra cómo recuperar una colección de objetos
insertados desde un proveedor de texto de Automatización de la interfaz de usuario.
Para el documento de ejemplo que se proporciona en la introducción, se devolverían
dos objetos (un elemento de imagen y un elemento de texto).

7 Nota

El elemento de imagen debería tener texto intrínseco asociado a él que describa la


imagen, normalmente en su NameProperty (por ejemplo, "Una ballena azul."). Sin
embargo, cuando se obtiene un intervalo de texto que abarca el objeto de imagen,
ni la imagen ni el texto descriptivo se devuelve en la secuencia de texto.

C#

///--------------------------------------------------------------------
/// <summary>
/// Starts the target application.
/// </summary>
/// <param name="app">
/// The application to start.
/// </param>
/// <returns>The automation element for the app main window.</returns>
/// <remarks>
/// Three WPF documents, a rich text document, and a plain text document
/// are provided in the Content folder of the TextProvider project.
/// </remarks>
///--------------------------------------------------------------------
private AutomationElement StartApp(string app)
{
// Start application.
Process p = Process.Start(app);

// Give the target application some time to start.


// For Win32 applications, WaitForInputIdle can be used instead.
// Another alternative is to listen for WindowOpened events.
// Otherwise, an ArgumentException results when you try to
// retrieve an automation element from the window handle.
Thread.Sleep(2000);

targetResult.Content =
WPFTarget +
" started. \n\nPlease load a document into the target " +
"application and click the 'Find edit control' button above. " +
"\n\nNOTE: Documents can be found in the 'Content' folder of the
FindText project.";
targetResult.Background = Brushes.LightGreen;
// Return the automation element for the app main window.
return (AutomationElement.FromHandle(p.MainWindowHandle));
}

C#

///--------------------------------------------------------------------
/// <summary>
/// Finds the text control in our target.
/// </summary>
/// <param name="src">The object that raised the event.</param>
/// <param name="e">Event arguments.</param>
/// <remarks>
/// Initializes the TextPattern object and event handlers.
/// </remarks>
///--------------------------------------------------------------------
private void FindTextProvider_Click(object src, RoutedEventArgs e)
{
// Set up the conditions for finding the text control.
PropertyCondition documentControl = new PropertyCondition(
AutomationElement.ControlTypeProperty,
ControlType.Document);
PropertyCondition textPatternAvailable = new PropertyCondition(
AutomationElement.IsTextPatternAvailableProperty, true);
AndCondition findControl =
new AndCondition(documentControl, textPatternAvailable);

// Get the Automation Element for the first text control found.
// For the purposes of this sample it is sufficient to find the
// first text control. In other cases there may be multiple text
// controls to sort through.
targetDocument =
targetWindow.FindFirst(TreeScope.Descendants, findControl);

// Didn't find a text control.


if (targetDocument == null)
{
targetResult.Content =
WPFTarget +
" does not contain a Document control type.";
targetResult.Background = Brushes.Salmon;
startWPFTargetButton.IsEnabled = false;
return;
}

// Get required control patterns


targetTextPattern =
targetDocument.GetCurrentPattern(
TextPattern.Pattern) as TextPattern;

// Didn't find a text control that supports TextPattern.


if (targetTextPattern == null)
{
targetResult.Content =
WPFTarget +
" does not contain an element that supports TextPattern.";
targetResult.Background = Brushes.Salmon;
startWPFTargetButton.IsEnabled = false;
return;
}

// Text control is available so display the client controls.


infoGrid.Visibility = Visibility.Visible;

targetResult.Content =
"Text provider found.";
targetResult.Background = Brushes.LightGreen;

// Initialize the document range for the text of the document.


documentRange = targetTextPattern.DocumentRange;

// Initialize the client's search buttons.


if (targetTextPattern.DocumentRange.GetText(1).Length > 0)
{
searchForwardButton.IsEnabled = true;
}
// Initialize the client's search TextBox.
searchString.IsEnabled = true;

// Check if the text control supports text selection


if (targetTextPattern.SupportedTextSelection ==
SupportedTextSelection.None)
{
targetResult.Content = "Unable to select text.";
targetResult.Background = Brushes.Salmon;
return;
}

// Edit control found so remove the find button from the client.
findEditButton.Visibility = Visibility.Collapsed;

// Initialize the client with the current target selection, if any.


NotifySelectionChanged();

// Search starts at beginning of doc and goes forward


searchBackward = false;

// Initialize a text changed listener.


// An instance of TextPatternRange will become invalid if
// one of the following occurs:
// 1) The text in the provider changes via some user activity.
// 2) ValuePattern.SetValue is used to programmatically change
// the value of the text in the provider.
// The only way the client application can detect if the text
// has changed (to ensure that the ranges are still valid),
// is by setting a listener for the TextChanged event of
// the TextPattern. If this event is raised, the client needs
// to update the targetDocumentRange member data to ensure the
// user is working with the updated text.
// Clients must always anticipate the possibility that the text
// can change underneath them.
Automation.AddAutomationEventHandler(
TextPattern.TextChangedEvent,
targetDocument,
TreeScope.Element,
TextChanged);

// Initialize a selection changed listener.


// The target selection is reflected in the client.
Automation.AddAutomationEventHandler(
TextPattern.TextSelectionChangedEvent,
targetDocument,
TreeScope.Element,
OnTextSelectionChange);
}

C#

///--------------------------------------------------------------------
/// <summary>
/// Gets the children of the target selection.
/// </summary>
/// <param name="sender">The object that raised the event.</param>
/// <param name="e">Event arguments.</param>
///--------------------------------------------------------------------
private void GetChildren_Click(object sender, RoutedEventArgs e)
{
// Obtain an array of child elements.
AutomationElement[] textProviderChildren;
try
{
textProviderChildren = searchRange.GetChildren();
}
catch (ElementNotAvailableException)
{
// TODO: error handling.
return;
}

// Assemble the information about the enclosing element.


StringBuilder childInformation = new StringBuilder();
childInformation.Append(textProviderChildren.Length)
.AppendLine(" child element(s).");

// Iterate through the collection of child elements and obtain


// information of interest about each.
for (int i = 0; i < textProviderChildren.Length; i++)
{
childInformation.Append("Child").Append(i).AppendLine(":");
// Obtain the name of the child control.
childInformation.Append("\tName:\t")
.AppendLine(textProviderChildren[i].Current.Name);
// Obtain the control type.
childInformation.Append("\tControl Type:\t")

.AppendLine(textProviderChildren[i].Current.ControlType.ProgrammaticName);

// Obtain the supported control patterns.


// NOTE: For the purposes of this sample we use
GetSupportedPatterns().
// However, the use of GetSupportedPatterns() is strongly
discouraged
// as it calls GetCurrentPattern() internally on every known
pattern.
// It is therefore much more efficient to use GetCurrentPattern()
for
// the specific patterns you are interested in.
AutomationPattern[] childPatterns =
textProviderChildren[i].GetSupportedPatterns();
childInformation.AppendLine("\tSupported Control Patterns:");
if (childPatterns.Length <= 0)
{
childInformation.AppendLine("\t\t\tNone");
}
else
{
foreach (AutomationPattern pattern in childPatterns)
{
childInformation.Append("\t\t\t")
.AppendLine(pattern.ProgrammaticName);
}
}

// Obtain the child elements, if any, of the child control.


TextPatternRange childRange =

documentRange.TextPattern.RangeFromChild(textProviderChildren[i]);
AutomationElement[] childRangeChildren =
childRange.GetChildren();
childInformation.Append("\tChildren:
\t").Append(childRangeChildren.Length).AppendLine();
}
// Display the information about the child controls.
targetSelectionDetails.Text = childInformation.ToString();
}

Ejemplo 2
En el ejemplo de código siguiente se muestra cómo obtener un intervalo de texto de un
objeto insertado dentro de un proveedor de texto de Automatización de la interfaz de
usuario. El intervalo de texto recuperado es un intervalo vacío donde el extremo inicial
se sitúa después de "... ocean.(space)" y el extremo final precede el punto final "." que
representa el hipervínculo incrustado (como se muestra en la imagen que se incluye en
la introducción). Aunque se trata de un intervalo vacío, no se considera un intervalo
degenerado porque tiene una extensión distinta de cero.

7 Nota

TextPattern puede recuperar un objeto incrustado basado en texto como un


hipervínculo; sin embargo, un elemento TextPattern secundario deberá obtenerse a
partir del objeto incrustado para exponer toda su funcionalidad.

C#

/// -------------------------------------------------------------------
/// <summary>
/// Obtains a text range spanning an embedded child
/// of a document control and displays the content of the range.
/// </summary>
/// <param name="targetTextElement">
/// The AutomationElement that represents a text control.
/// </param>
/// -------------------------------------------------------------------
private void GetRangeFromChild(AutomationElement targetTextElement)
{
TextPattern textPattern =
targetTextElement.GetCurrentPattern(TextPattern.Pattern)
as TextPattern;

if (textPattern == null)
{
// Target control doesn't support TextPattern.
return;
}

// Obtain a text range spanning the entire document.


TextPatternRange textRange = textPattern.DocumentRange;

// Retrieve the embedded objects within the range.


AutomationElement[] embeddedObjects = textRange.GetChildren();

// Retrieve and display text value of embedded object.


foreach (AutomationElement embeddedObject in embeddedObjects)
{
if ((bool)embeddedObject.GetCurrentPropertyValue(
AutomationElement.IsTextPatternAvailableProperty))
{
// For full functionality a secondary TextPattern should
// be obtained from the embedded object.
// embeddedObject must be a child of the text provider.
TextPatternRange embeddedObjectRange =
textPattern.RangeFromChild(embeddedObject);
// GetText(-1) retrieves all text in the range.
// Typically a more limited amount of text would be
// retrieved for performance and security reasons.
Console.WriteLine(embeddedObjectRange.GetText(-1));
}
}
}

Consulte también
Información general sobre el modelo de texto de UI Automation
Información general acerca de los patrones de control de UI Automation
Patrones de controles de UI Automation para clientes
Agregar contenido a un cuadro de texto utilizando la UI Automation
Buscar y resaltar texto mediante UI Automation
Tipos de control de UI Automation
Artículo • 10/05/2023

7 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 sección contiene información sobre la compatibilidad con los tipos de control en
Automatización de la interfaz de usuario de Windows.

En esta sección
Información general sobre tipos de control de UI Automation
Compatibilidad de UI Automation para el tipo de control Button
Compatibilidad de UI Automation para el tipo de control Calendar
Compatibilidad de UI Automation para el tipo de control CheckBox
Compatibilidad de UI Automation para el tipo de control ComboBox
Compatibilidad de UI Automation para el tipo de control DataGrid
Compatibilidad de UI Automation para el tipo de control DataItem
Compatibilidad de UI Automation para el tipo de control Document
Compatibilidad de UI Automation para el tipo de control Edit
Compatibilidad de UI Automation para el tipo de control Group
Compatibilidad de UI Automation para el tipo de control Header
Compatibilidad de la UI Automation para el tipo de control HeaderItem
Compatibilidad de UI Automation para el tipo de control Hyperlink
Compatibilidad de UI Automation para el tipo de control Image
Compatibilidad de UI Automation para el tipo de control List
Compatibilidad de UI Automation para el tipo de control ListItem
Compatibilidad de UI Automation para el tipo de control Menu
Compatibilidad de UI Automation para el tipo de control MenuBar
Compatibilidad de UI Automation para el tipo de control MenuItem
Compatibilidad de UI Automation para el tipo de control Pane
Compatibilidad de UI Automation para el tipo de control ProgressBar
Compatibilidad de UI Automation para el tipo de control RadioButton
Compatibilidad de UI Automation para el tipo de control ScrollBar
Compatibilidad de UI Automation para el tipo de control Separator
Compatibilidad de la UI Automation para el tipo de control Slider
Compatibilidad de automatización de la IU para el tipo de control Spinner
Compatibilidad de UI Automation para el tipo de control SplitButton
Compatibilidad de UI Automation para el tipo de control StatusBar
Compatibilidad de UI Automation para el tipo de control Tab
Compatibilidad de UI Automation para el tipo de control TabItem
Compatibilidad de UI Automation para el tipo de control Table
Compatibilidad de UI Automation para el tipo de control Text
Compatibilidad de automatización de la interfaz de usuario para el tipo de control
de posición
Compatibilidad de UI Automation para el tipo de control TitleBar
Compatibilidad de UI Automation para el tipo de control ToolBar
Compatibilidad de UI Automation para el tipo de control ToolTip
Compatibilidad de UI Automation para el tipo de control Tree
Compatibilidad de UI Automation para el tipo de control TreeItem
Compatibilidad de UI Automation para el tipo de control Window

Referencia
ControlType

Consulte también
Patrones de control de UI Automation
Información general sobre tipos de
control de UI Automation
Artículo • 09/05/2023

7 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.

Los tipos de control de Microsoft UI Automation son identificadores bien conocidos que
pueden utilizarse para indicar qué tipo de control representa un elemento concreto,
como un cuadro combinado o un botón.

Disponer de un identificador conocido facilita que los dispositivos de tecnología de


asistencia determinen qué tipos de controles están disponibles en la interfaz de usuario
(UI) y cómo interactuar con los controles.

Requisitos de los tipos de control de la


automatización de la interfaz de usuario
Los tipos de control de Microsoft UI Automation proporcionan un conjunto de
condiciones que los proveedores deben cumplir. Cuando se cumplen estas condiciones,
el control puede usar el nombre de tipo de control específico. Cada tipo de control tiene
condiciones para los siguientes elementos:

Patrones de control de UI Automation: qué patrones de control deben ser


soportados, qué patrones de control son opcionales y qué patrones de control no
deben ser soportados por el control.

Valores de las propiedades de UI Automation: qué valores de las propiedades se


admiten.

Estructura de árbol de UI Automation: la estructura de árbol de automatización de


la interfaz de usuario necesaria para el control.
Cuando un control cumple las condiciones de un tipo de control particular, el valor de la
propiedad ControlType indicará ese tipo de control.

Tipos actuales de control de automatización de


la interfaz de usuario
La siguiente lista contiene el conjunto actual de tipos de control de Microsoft UI
Automation:

Compatibilidad de UI Automation para el tipo de control Button

Compatibilidad de UI Automation para el tipo de control Calendar

Compatibilidad de UI Automation para el tipo de control CheckBox

Compatibilidad de UI Automation para el tipo de control ComboBox

Compatibilidad de UI Automation para el tipo de control DataGrid

Compatibilidad de UI Automation para el tipo de control DataItem

Compatibilidad de UI Automation para el tipo de control Document

Compatibilidad de UI Automation para el tipo de control Edit

Compatibilidad de UI Automation para el tipo de control Group

Compatibilidad de UI Automation para el tipo de control Header

Compatibilidad de la UI Automation para el tipo de control HeaderItem

Compatibilidad de UI Automation para el tipo de control Hyperlink

Compatibilidad de UI Automation para el tipo de control Image

Compatibilidad de UI Automation para el tipo de control List

Compatibilidad de UI Automation para el tipo de control ListItem

Compatibilidad de UI Automation para el tipo de control Menu

Compatibilidad de UI Automation para el tipo de control MenuBar

Compatibilidad de UI Automation para el tipo de control MenuItem

Compatibilidad de UI Automation para el tipo de control Pane


Compatibilidad de UI Automation para el tipo de control ProgressBar

Compatibilidad de UI Automation para el tipo de control RadioButton

Compatibilidad de UI Automation para el tipo de control ScrollBar

Compatibilidad de UI Automation para el tipo de control Separator

Compatibilidad de la UI Automation para el tipo de control Slider

Compatibilidad de automatización de la IU para el tipo de control Spinner

Compatibilidad de UI Automation para el tipo de control SplitButton

Compatibilidad de UI Automation para el tipo de control StatusBar

Compatibilidad de UI Automation para el tipo de control Tab

Compatibilidad de UI Automation para el tipo de control TabItem

Compatibilidad de UI Automation para el tipo de control Table

Compatibilidad de UI Automation para el tipo de control Text

Compatibilidad de automatización de la interfaz de usuario para el tipo de control


de posición

Compatibilidad de UI Automation para el tipo de control TitleBar

Compatibilidad de UI Automation para el tipo de control ToolBar

Compatibilidad de UI Automation para el tipo de control ToolTip

Compatibilidad de UI Automation para el tipo de control Tree

Compatibilidad de UI Automation para el tipo de control TreeItem

Compatibilidad de UI Automation para el tipo de control Window

Consulte también
ControlType
Compatibilidad de UI Automation para
el tipo de control Button
Artículo • 10/05/2023

7 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.

Este tema proporciona información sobre la compatibilidad de UI Automation con el


tipo de control de botón. En UI Automation, un tipo de control es un conjunto de
condiciones que un control debe cumplir para poder usar la propiedad
ControlTypeProperty. Las condiciones incluyen directrices específicas para la estructura
de árbol de Automatización de la interfaz de usuario, los valores de propiedad de
Automatización de la interfaz de usuario, los patrones de control y los eventos de
automatización de la interfaz de usuario.

Un botón es un objeto con el que un usuario interactúa para realizar una acción, como
por ejemplo los botones Aceptar y Cancelar de un cuadro de diálogo. El control de
botón es un control simple de exponer porque se asigna a un único comando que el
usuario quiere realizar.

Las siguientes secciones definen la estructura de árbol de automatización de UI


Automation, las propiedades, los patrones de control y los eventos para el tipo de
control de botón. Los requisitos de UI Automation se aplican a todos los controles de
botón de número, ya sea Windows Presentation Foundation (WPF), Win32 o Windows
Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
La siguiente tabla muestra la vista de control y la vista de contenido del árbol de UI
Automation que pertenece a los controles de botón y describe lo que puede contener
cada vista. Para más información sobre el árbol de UI Automation,consulte Introducción
al árbol de Automatización de la interfaz de usuario.
Vista de control Vista de contenido

Botón Botón

- Image (0 o más)
- Texto (0 o más)

Propiedades de Automatización de la interfaz


de usuario necesarias
En la siguiente tabla se enumeran las propiedades UI Automation que tienen un valor o
una definición que son especialmente relevantes para los controles que implementan el
tipo de control Button (como los controles de botón). Para más información sobre las
propiedades de automatización de la interfaz de usuario, consulte Propiedades de
automatización de la interfaz de usuario para clientes.

Propiedad de Valor Notas


automatización de interfaz
de usuario

AcceleratorKeyProperty Vea las El control Button normalmente debe admitir una tecla
notas. de aceleración para permitir que los usuarios finales
realicen la acción que representa rápidamente desde el
teclado.

AutomationIdProperty Vea las El valor de esta propiedad debe ser único en todos los
notas. controles de una aplicación.

BoundingRectangleProperty Vea las El rectángulo exterior que contiene el control


notas. completo.

ClickablePointProperty Vea las Se admite si hay un rectángulo delimitador. Si no


notas. todos los puntos que se encuentran dentro del
rectángulo delimitador son seleccionables, y realiza
pruebas de aciertos especializadas, invalide y ofrezca
un punto en el que hacer clic.

ControlTypeProperty Botón Este valor es el mismo para todos los marcos de


trabajo de la interfaz de usuario.

HelpTextProperty Vea las El texto de ayuda puede indicar cuál será el resultado
notas. final de la activación del botón. Suele ser el mismo tipo
de información que se presenta mediante un elemento
de información sobre herramientas.

IsContentElementProperty True El control Button siempre debe ser contenido.


Propiedad de Valor Notas
automatización de interfaz
de usuario

IsControlElementProperty True El control Button siempre debe ser un control.

IsKeyboardFocusableProperty Vea las Si el control puede recibir el foco del teclado, debe
notas. admitir esta propiedad.

LabeledByProperty Null Los controles de botón se etiquetan automáticamente


con su contenido.

LocalizedControlTypeProperty "botón" Cadena localizada que corresponde al tipo de control


Button.

NameProperty Vea las El nombre del control de botón es el texto que se


notas. utiliza para etiquetarlo. Cada vez que se utiliza una
imagen para etiquetar un botón, debe proporcionar
texto alternativo para la propiedad Name del botón.

Patrones de control de Automatización de la


interfaz de usuario necesarios
La siguiente tabla enumera los patrones de control de UI Automation que deben
soportar todos los controles de botón. Para más información sobre los patrones de
control, vea UI Automation Control Patterns Overview.

Patrón de control Soporte Notas


técnico

IInvokeProvider Vea las Todos los botones deben admitir el patrón de control
notas. Invoke o el patrón de control Toggle. Invoke se admite
cuando el botón ejecuta un comando a petición del
usuario. Este comando se asigna a una única operación,
como cortar, copiar, pegar o eliminar.

IToggleProvider Vea las Todos los botones deben admitir el patrón de control
notas. Invoke o el patrón de control Toggle. Toggle se admite si el
botón puede pasar cíclicamente por una serie de hasta tres
estados. Normalmente, se considera como un conmutador
de encendido y apagado para características específicas.
Patrón de control Soporte Notas
técnico

IExpandCollapseProvider Vea las Cuando un botón se hospeda como elemento secundario


notas. de un botón de expansión, el botón secundario puede
admitir el patrón ExpandCollapse en lugar de Invoke o
Toggle. El patrón ExpandCollapse se puede usar para abrir
o cerrar un menú u otra subestructura asociada con el
elemento de botón.

Eventos de Automatización de la interfaz de


usuario necesarios
La siguiente tabla enumera los eventos de UI Automation que deben ser soportados por
todos los controles de botón. Para más información sobre los eventos, vea UI
Automation Events Overview.

Evento de Automatización de la Soporte Notas


interfaz de usuario técnico

AutomationFocusChangedEvent Obligatorio None

Evento cambiado por Obligatorio None


propiedadBoundingRectangleProperty
.

Evento cambiado por Obligatorio None


propiedadIsOffscreenProperty .

Evento cambiado por Obligatorio None


propiedadIsEnabledProperty .

Evento cambiado por Obligatorio None


propiedadNameProperty .

StructureChangedEvent Obligatorio None

InvokedEvent Depende Si el control admite el patrón de control


Invoke, debe admitir este evento.

Evento cambiado por Depende Si el control admite el patrón de control


propiedadToggleStateProperty . Toggle, debe admitir este evento.

Consulte también
Button
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de UI Automation para
el tipo de control Calendar
Artículo • 09/05/2023

7 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 ofrece información sobre la compatibilidad de Automatización de la


interfaz de usuario con el tipo de control Calendar. En Automatización de la interfaz de
usuario, un tipo de control es un conjunto de condiciones que un control debe cumplir
para poder usar la propiedad ControlTypeProperty. Las condiciones incluyen directrices
específicas para la estructura de árbol de Automatización de la interfaz de usuario, los
valores de propiedad de Automatización de la interfaz de usuario, los patrones de
control y los eventos de automatización de la interfaz de usuario.

Los controles Calendar permiten a un usuario determinar la fecha y seleccionar otras


fechas con facilidad.

En las secciones siguientes se definen la estructura de árbol de Automatización de la


interfaz de usuario, las propiedades, los patrones de control y los eventos necesarios
para el tipo de control Calendar. Los requisitos de Automatización de la interfaz de
usuario se aplican a todos los controles de calendario, ya sea Windows Presentation
Foundation (WPF), Win32 o Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
En la tabla siguiente se describe la vista de control y la vista de contenido del árbol de
Automatización de la interfaz de usuario que pertenece a los controles de calendario y
se describe lo que puede incluirse en cada vista. Para más información sobre el árbol de
Automatización de la interfaz de usuario, vea Información general del árbol de
Automatización de la interfaz de usuario.
Vista de control Vista de contenido

Calendario Calendario

- ListItem (la cantidad depende del


DataGrid número de días que se muestren)

Header (0 o 1)
HeaderItem (0 o 7; la cantidad depende del
número de días que se muestren en columnas)
ListItem (la cantidad depende del número de
días que se muestren)
Button (0 o 2; para la paginación de la vista de
calendario)

Los controles de calendario se pueden representar de muchas formas diferentes dentro


de la interfaz de usuario. Los únicos controles que con seguridad están en la vista de
control del árbol de la automatización de la interfaz de usuario son los controles de
cuadrícula de datos, encabezado, elemento de encabezado y elemento de lista.

Propiedades de Automatización de la interfaz


de usuario necesarias
En la tabla siguiente se muestran las propiedades de automatización de la interfaz de
usuario cuyo valor o definición es especialmente relevante para los controles Calendar.
Para más información sobre las propiedades de automatización de la interfaz de
usuario, vea Propiedades de Automatización de la interfaz de usuario Properties para
clientes.

Propiedad de Valor Notas


automatización de interfaz
de usuario

AutomationIdProperty Vea las El valor de esta propiedad debe ser único en


notas. todos los controles de una aplicación.

BoundingRectangleProperty Vea las El rectángulo exterior que contiene el control


notas. completo.

ClickablePointProperty Vea las Se admite si hay un rectángulo delimitador. Si no


notas. todos los puntos que se encuentran dentro del
rectángulo delimitador son seleccionables, y
realiza pruebas de aciertos especializadas, invalide
y ofrezca un punto en el que hacer clic.
Propiedad de Valor Notas
automatización de interfaz
de usuario

ControlTypeProperty Calendario Este valor es el mismo para todos los marcos de


trabajo de la interfaz de usuario.

IsContentElementProperty True El control de calendario siempre se incluye en la


vista de contenido del árbol de automatización de
la interfaz de usuario.

IsControlElementProperty True El control de calendario siempre se incluye en la


vista de control del árbol de automatización de la
interfaz de usuario.

IsKeyboardFocusableProperty Vea las Si el control puede recibir el foco del teclado,


notas. debe admitir esta propiedad.

LabeledByProperty Vea las La etiqueta del control de documento.


notas. Normalmente, se utiliza el título del documento.

LocalizedControlTypeProperty "calendario" Cadena localizada que corresponde al tipo de


control Calendar.

NameProperty Vea las Normalmente, el control de calendario recibe su


notas. nombre de la fecha del día actual.

Patrones de control de Automatización de la


interfaz de usuario necesarios
En la tabla siguiente se muestran los patrones de control de automatización de la
interfaz de usuario necesarios para que todos los controles de calendario los admitan.
Para más información sobre los patrones de control, vea UI Automation Control Patterns
Overview.

Patrón de Soporte Notas


control/Propiedad técnico
de patrón

IGridProvider Sí El control de calendario siempre admite el patrón Grid porque


los días en un mes son elementos que se pueden recorrer
espacialmente.

IScrollProvider Depende La mayoría de los controles de calendario admiten voltear la


vista por página. Se recomienda el patrón Scroll para admitir la
navegación de paginación.
Patrón de Soporte Notas
control/Propiedad técnico
de patrón

ISelectionProvider Depende La mayoría de los controles de calendario conservan un


determinado día, mes o año como una selección del
subelemento. Algunos calendarios son de selección múltiple y
otros solamente de selección sencilla.

ITableProvider Yes El control de calendario siempre tiene un encabezado dentro


de su subárbol para los días de la semana, por lo que se debe
admitir el patrón Table.

IValueProvider No El patrón de control Value no es necesario para los controles de


calendario porque no se puede establecer el valor directamente
en el control. Si una fecha concreta está asociada con el control,
el patrón de control Selection debe proporcionar la
información.

Eventos de Automatización de la interfaz de


usuario necesarios
En la tabla siguiente se muestran los eventos de automatización de la interfaz de
usuario que se deben admitir por parte de todos los controles de calendario. Para más
información sobre eventos, vea UI Automation Events Overview.

Evento de Automatización de la Soporte Notas


interfaz de usuario técnico

AutomationFocusChangedEvent Obligatorio None

Evento cambiado por Obligatorio None


propiedadBoundingRectangleProperty .

Evento cambiado por Obligatorio None


propiedadIsEnabledProperty .

Evento cambiado por Obligatorio None


propiedadIsOffscreenProperty .

LayoutInvalidatedEvent Obligatorio None

StructureChangedEvent Obligatorio None

Evento cambiado por Depende None


propiedadCurrentViewProperty .
Evento de Automatización de la Soporte Notas
interfaz de usuario técnico

Evento cambiado por Depende Si el control admite el patrón de


propiedadHorizontallyScrollableProperty . control Scroll, debe admitir este
evento.

Evento cambiado por Depende Si el control admite el patrón de


propiedadHorizontalScrollPercentProperty control Scroll, debe admitir este
. evento.

Evento cambiado por Depende Si el control admite el patrón de


propiedadHorizontalViewSizeProperty . control Scroll, debe admitir este
evento.

Evento cambiado por Depende Si el control admite el patrón de


propiedadVerticalScrollPercentProperty . control Scroll, debe admitir este
evento.

Evento cambiado por Depende Si el control admite el patrón de


propiedadVerticallyScrollableProperty . control Scroll, debe admitir este
evento.

Evento cambiado por Depende Si el control admite el patrón de


propiedadVerticalViewSizeProperty . control Scroll, debe admitir este
evento.

InvalidatedEvent Obligatorio None

Consulte también
Calendar
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de UI Automation para
el tipo de control CheckBox
Artículo • 10/05/2023

7 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 ofrece información sobre la compatibilidad de automatización de la


interfaz de usuario de Microsoft con el tipo de control CheckBox. En Automatización de
la interfaz de usuario, un tipo de control es un conjunto de condiciones que un control
debe cumplir para poder usar la propiedad ControlTypeProperty. Las condiciones
incluyen directrices específicas para la estructura de árbol de Automatización de la
interfaz de usuario, los valores de propiedad de automatización de la interfaz de usuario
y los patrones de control.

Una casilla es un objeto que se usa para indicar un estado con el que los usuarios
pueden interactuar para recorrer cíclicamente dicho estado. Las casillas le presentan al
usuario una opción binaria (Sí/No), (Activado/Desactivado) o terciaria (Activado,
Desactivado, Indeterminado).

En las secciones siguientes se definen la estructura de árbol, las propiedades, los


patrones de control y los eventos para el tipo de control CheckBox de automatización
de la interfaz de usuario necesarios. Los requisitos de Automatización de la interfaz de
usuario se aplican a todos los controles de casilla, ya sea Windows Presentation
Foundation (WPF), Win32 o Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
En la tabla siguiente se describe la vista de control y la vista de contenido del árbol de
automatización de la interfaz de usuario que pertenece a los controles de casilla y se
describe lo que puede incluirse en cada vista. Para más información sobre el árbol de
automatización de la interfaz de usuario, vea Información general del árbol de
automatización de la interfaz de usuario.

Vista de control Vista de contenido

CheckBox CheckBox

7 Nota

Las casillas nunca tienen elementos secundarios en el control ni en la vista de


contenido. Si el control no necesita contener elementos secundarios, quiere decir
que se debe usar otro tipo de control.

Propiedades de Automatización de la interfaz de usuario


necesarias
En la tabla siguiente se muestran las propiedades de automatización de la interfaz de
usuario cuyo valor o definición es especialmente relevante para los controles de casilla.
Para más información sobre las propiedades de automatización de la interfaz de
usuario, vea Propiedades de automatización de la interfaz de usuario para clientes.

Propiedad de Valor Notas


automatización de interfaz
de usuario

AutomationIdProperty Vea las El valor de esta propiedad debe ser único en todos
notas. los controles de una aplicación.

BoundingRectangleProperty Vea las El rectángulo exterior que contiene el control


notas. completo.

ClickablePointProperty Vea las Se admite si hay un rectángulo delimitador. Si no


notas. todos los puntos que se encuentran dentro del
rectángulo delimitador son seleccionables, y realiza
pruebas de aciertos especializadas, invalide y ofrezca
un punto en el que hacer clic.

ControlTypeProperty CheckBox Este valor es el mismo para todos los marcos de


trabajo de la interfaz de usuario.

IsContentElementProperty True El valor de esta propiedad siempre debe ser True.


Esto significa que el control de casilla siempre debe
incluirse en la vista de contenido del árbol de
automatización de la interfaz de usuario.
Propiedad de Valor Notas
automatización de interfaz
de usuario

IsControlElementProperty True El valor de esta propiedad siempre debe ser True.


Esto significa que el control de cuadrícula de datos
siempre debe estar en la vista de control del árbol de
automatización de la interfaz de usuario.

IsKeyboardFocusableProperty Vea las Si el control puede recibir el foco del teclado, debe
notas. admitir esta propiedad.

LabeledByProperty Null Las casillas son controles que se etiquetan


automáticamente.

LocalizedControlTypeProperty "casilla" Cadena localizada que corresponde al tipo de


control CheckBox.

NameProperty Vea las El valor de la propiedad Name del control de casilla es


notas. el texto que se muestra junto al cuadro que
mantiene el estado de alternancia.

Patrones de control de Automatización de la


interfaz de usuario necesarios
En la tabla siguiente se muestran los patrones de control de automatización de la
interfaz de usuario necesarios para que todos los controles de casilla los admitan. Para
más información sobre los patrones de control, vea UI Automation Control Patterns
Overview.

Patrón de Soporte Notas


control técnico

IToggleProvider Obligatorio Permite que la casilla se recorra cíclicamente por sus estados
internos mediante programación.

Eventos de Automatización de la interfaz de


usuario necesarios
En la siguiente tabla se muestra los eventos de automatización de la interfaz de usuario
requeridos para ser admitidos por todos los controles de casilla. Para más información
sobre eventos, vea UI Automation Events Overview.
Evento de Automatización de la interfaz de usuario Soporte técnico Notas

AutomationFocusChangedEvent Obligatorio None

Evento cambiado por propiedadBoundingRectangleProperty . Obligatorio None

Evento cambiado por propiedadIsOffscreenProperty . Obligatorio None

Evento cambiado por propiedadIsEnabledProperty . Obligatorio None

StructureChangedEvent Obligatorio None

Evento cambiado por propiedadToggleStateProperty . Obligatorio None

Acción predeterminada
La acción predeterminada de la casilla es hacer que un botón de radio reciba el foco y
alterne su estado actual. Como se mencionó con anterioridad, las casillas le presentan al
usuario una decisión binaria (Sí/No), (Activado/Desactivado) o terciaria (Activado,
Desactivado, Indeterminado). Si la casilla es binaria, la acción predeterminada hace que
el estado "activado" se convierta en "desactivado" o que el estado "desactivado" pase a
"activado". En una casilla de estado terciaria la acción predeterminada recorre
cíclicamente los estados de la casilla en el mismo orden que si el usuario hubiera
enviado sucesivos clics del mouse al control.

Consulte también
CheckBox
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de UI Automation para
el tipo de control ComboBox
Artículo • 10/05/2023

7 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 ofrece información sobre la compatibilidad de Automatización de la


interfaz de usuario con el tipo de control ComboBox. En Automatización de la interfaz
de usuario, un tipo de control es un conjunto de condiciones que un control debe
cumplir para poder usar la propiedad ControlTypeProperty. Las condiciones incluyen
directrices específicas para la estructura de árbol de Automatización de la interfaz de
usuario, los valores de propiedad de Automatización de la interfaz de usuario, los
patrones de control y los eventos de automatización de la interfaz de usuario.

Un cuadro combinado es un cuadro de lista combinado con un control estático o un


control de edición que muestra el elemento seleccionado actualmente en la parte del
cuadro de lista del cuadro combinado. La parte de cuadro de lista del control se muestra
en todo momento o solo aparece cuando el usuario selecciona la flecha de lista
desplegable (que es un botón de comando) junto al control. Si el campo de selección es
un control de edición, el usuario puede escribir información que no esté en la lista; de lo
contrario, el usuario solo puede seleccionar elementos de la lista.

En las secciones siguientes se definen la estructura de árbol, las propiedades, los


patrones de control y los eventos para el tipo de control ComboBox de Automatización
de la interfaz de usuario necesarios. Los requisitos de Automatización de la interfaz de
usuario se aplican a todos los controles de cuadro combinado, ya sea Windows
Presentation Foundation (WPF), Win32 o Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
En la tabla siguiente se describe la vista de control y la vista de contenido del árbol de
Automatización de la interfaz de usuario que pertenece a los controles de cuadro
combinado y se describe lo que puede incluirse en cada vista. Para más información
sobre el árbol de Automatización de la interfaz de usuario, vea Información general del
árbol de Automatización de la interfaz de usuario.

Vista de control Vista de contenido

ComboBox ComboBox

- Edit (0 o 1) - List Item (de 0 a varios)


- List (1)
- List Item (elemento secundario de List; de 0 a varios)
- Button (1)

El control de edición de la vista de control del cuadro combinado solo es necesario si el


cuadro combinado se puede editar para aceptar cualquier entrada, como es el caso del
cuadro combinado que se encuentra en el cuadro de diálogo Ejecutar.

Propiedades de Automatización de la interfaz


de usuario necesarias
En la tabla siguiente se muestran las propiedades de Automatización de la interfaz de
usuario cuyo valor o definición es especialmente relevante para los controles de cuadro
combinado. Para más información sobre las propiedades de automatización de la
interfaz de usuario, vea Propiedades de automatización de la interfaz de usuario para
clientes.

Propiedad de Valor Notas


automatización de interfaz
de usuario

AutomationIdProperty Vea las El valor de esta propiedad debe ser único en


notas. todos los controles de una aplicación.

BoundingRectangleProperty Vea las El rectángulo exterior que contiene el control


notas. completo.

ClickablePointProperty Vea las Se admite si hay un rectángulo delimitador. Si no


notas. todos los puntos que se encuentran dentro del
rectángulo delimitador son seleccionables, y
realiza pruebas de aciertos especializadas, invalide
y ofrezca un punto en el que hacer clic.
Propiedad de Valor Notas
automatización de interfaz
de usuario

ControlTypeProperty ComboBox Este valor es el mismo para todos los marcos de


trabajo de la interfaz de usuario.

HelpTextProperty Vea las El texto de ayuda de los controles de cuadro


notas. combinado debe explicar por qué se le pide al
usuario que elija una opción del cuadro
combinado. El texto es similar a la información
que se presenta mediante un elemento de
información sobre herramientas. Por ejemplo,
"Seleccione un elemento para establecer la
resolución de pantalla del monitor".

IsContentElementProperty True Los controles de cuadro combinado siempre se


incluyen en la vista de contenido del árbol de
automatización de la interfaz de usuario.

IsControlElementProperty True Los controles de cuadro combinado siempre se


incluyen en la vista de control del árbol de
automatización de la interfaz de usuario.

IsKeyboardFocusableProperty True Los controles de cuadro combinado exponen un


conjunto de elementos de un contenedor de
selección. El control de cuadro combinado puede
recibir el foco del teclado, aunque cuando un
cliente de Automatización de la interfaz de usuario
establece el foco en un cuadro combinado, los
elementos del subárbol del cuadro combinado
pueden recibir el foco.

LabeledByProperty Vea las Los controles de cuadro combinado suelen tener


notas. una etiqueta de texto estático a la que hace
referencia esta propiedad.

LocalizedControlTypeProperty "cuadro Cadena localizada que corresponde al tipo de


combinado" control ComboBox.

NameProperty Vea las El control del cuadro combinado suele recibir su


notas. nombre de un control de texto estático.

Patrones de control de Automatización de la


interfaz de usuario necesarios
En la tabla siguiente se muestran los patrones de control de automatización de la
interfaz de usuario necesarios para que todos los controles de cuadro combinado los
admitan. Para más información sobre los patrones de control, vea UI Automation
Control Patterns Overview.

Patrón de control Soporte Notas


técnico

IExpandCollapseProvider Sí El control de cuadro combinado siempre debe contener el


botón de lista desplegable para se considere un cuadro
combinado.

ISelectionProvider Sí Muestra la selección actual en el cuadro combinado. Esta


compatibilidad se delega en el cuadro de lista situado
debajo del cuadro combinado.

IValueProvider Depende Si el cuadro combinado tiene la capacidad de tomar


valores de texto arbitrarios, se debe admitir el patrón
Value. Este patrón ofrece la capacidad de establecer
mediante programación el contenido de la cadena del
cuadro combinado. Si no se admite el patrón Value, esto
indica que el usuario debe realizar una selección de los
elementos de lista dentro del subárbol del cuadro
combinado.

IScrollProvider Nunca El patrón Scroll nunca se admite directamente en un


cuadro combinado. Se admite si se puede desplazar un
cuadro de lista contenido dentro de un cuadro
combinado. Solo se admite cuando el cuadro de lista está
visible en la pantalla.

Eventos necesarios
En la siguiente tabla se muestra los eventos de Automatización de la interfaz de usuario
requeridos para ser admitidos por todos los controles de cuadro combinado. Para más
información sobre los eventos, vea UI Automation Events Overview.

Evento de Automatización de la Soporte Notas


interfaz de usuario técnico

AutomationFocusChangedEvent Obligatorio None

Evento cambiado por Obligatorio None


propiedadBoundingRectangleProperty .

Evento cambiado por Obligatorio None


propiedadIsOffscreenProperty .

Evento cambiado por Obligatorio None


propiedadIsEnabledProperty .
Evento de Automatización de la Soporte Notas
interfaz de usuario técnico

StructureChangedEvent Obligatorio None

Evento cambiado por Obligatorio None


propiedadExpandCollapseStateProperty .

Evento cambiado por Depende Si el control admite el patrón Value,


propiedadValueProperty . debe admitir este evento.

Consulte también
ComboBox
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de UI Automation para
el tipo de control DataGrid
Artículo • 11/04/2023

7 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 ofrece información sobre la compatibilidad de Automatización de la


interfaz de usuario de Microsoft con el tipo de control DataGrid. En Automatización de
la interfaz de usuario, un tipo de control es un conjunto de condiciones que un control
debe cumplir para poder usar la propiedad ControlType . Las condiciones incluyen
directrices específicas para la estructura de árbol de Automatización de la interfaz de
usuario, los valores de propiedad de Automatización de la interfaz de usuario y los
patrones de control.

El tipo de control DataGrid permite a un usuario trabajar fácilmente con elementos que
contienen metadatos representados en columnas. Los controles de cuadrícula de datos
tienen filas de elementos y columnas de información sobre esos elementos. Un control
List View en Microsoft Vista Explorer es un ejemplo que admite el tipo de control
DataGrid.

En las secciones siguientes se definen la estructura de árbol, las propiedades, los


patrones de control y los eventos para el tipo de control DataGrid de Automatización de
la interfaz de usuario necesarios. Los requisitos de Automatización de la interfaz de
usuario se aplican a todos los controles de cuadrícula de datos, ya sea Windows
Presentation Foundation (WPF), Win32 o Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
En la tabla siguiente se describe la vista de control y la vista de contenido del árbol de
Automatización de la interfaz de usuario que pertenece a los controles de cuadrícula de
datos y se describe lo que puede incluirse en cada vista. Para más información sobre el
árbol de UI Automation, vea Información general del árbol de UI Automation.

Árbol de Automatización de la interfaz de Árbol de Automatización de la interfaz de


usuario: vista de control usuario: vista de contenido

DataGrid DataGrid

- DataItem (0 o más; se puede estructurar en


Header (0, 1 o 2) jerarquía)

HeaderItem (número de columnas o


filas)
DataItem (0 o más; se puede estructurar
en jerarquía)

Propiedades de Automatización de la interfaz


de usuario necesarias
En la tabla siguiente se muestran las propiedades que tienen un valor o una definición
que es especialmente relevante para los controles de cuadrícula de datos. Para más
información sobre las propiedades de automatización de la interfaz de usuario, vea UI
Automation Properties for Clients.

Propiedad Valor Notas

AutomationIdProperty Vea las El valor de esta propiedad debe ser único en todos
notas. los controles de una aplicación.

BoundingRectangleProperty Vea las El rectángulo exterior que contiene el control


notas. completo.

ClickablePointProperty Vea las Se admite si hay un rectángulo delimitador. Si no


notas. todos los puntos que se encuentran dentro del
rectángulo delimitador son seleccionables, y realiza
pruebas de aciertos especializadas, invalide y
ofrezca un punto en el que hacer clic.

ControlTypeProperty DataGrid Este valor es el mismo para todos los marcos de


trabajo de la interfaz de usuario.

IsContentElementProperty True El valor de esta propiedad siempre debe ser True.


Esto significa que el control de cuadrícula de datos
siempre debe estar en la vista de contenido del
árbol de Automatización de la interfaz de usuario.
Propiedad Valor Notas

IsControlElementProperty True El valor de esta propiedad siempre debe ser True.


Esto significa que el control de cuadrícula de datos
siempre debe estar en la vista de control del árbol
de Automatización de la interfaz de usuario.

IsKeyboardFocusableProperty Vea las Si el control puede recibir el foco del teclado, debe
notas. admitir esta propiedad.

LabeledByProperty Vea las Si hay una etiqueta de texto estático, esta


notas. propiedad debe exponer una referencia a ese
control.

LocalizedControlTypeProperty "cuadrícula Cadena localizada que corresponde al tipo de


de datos" control DataGrid.

NameProperty Vea las El control de cuadrícula de datos normalmente


notas. obtiene el valor de su propiedad Name de una
etiqueta de texto estático. Si no hay una etiqueta
de texto estático, un desarrollador de aplicaciones
debe asignar un valor a la propiedad Name . El valor
de la propiedad Name nunca debe ser el contenido
textual del control de edición.

Patrones de control de Automatización de la


interfaz de usuario necesarios
En la tabla siguiente se muestran los patrones de control de necesarios para que todos
los controles de cuadrícula de datos los admitan. Para más información sobre los
patrones de control, vea UI Automation Control Patterns Overview.

Patrón de Soporte Notas


control técnico

IGridProvider Sí El propio control de cuadrícula de datos siempre admite el


patrón de control Grid porque los elementos que contiene
incluyen metadatos que se presentan en una cuadrícula.

IScrollProvider Depende La capacidad de desplazar la cuadrícula de datos depende del


contenido y de si las barras de desplazamiento están presentes.

ISelectionProvider Depende La capacidad de seleccionar la cuadrícula de datos depende del


contenido.
Patrón de Soporte Notas
control técnico

ITableProvider Sí El control de cuadrícula de datos siempre tiene un encabezado


dentro de su subárbol, por lo que se debe admitir el patrón de
control Table.

Los elementos de datos dentro de los contenedores de la cuadrícula de datos admitirán


como mínimo:

El patrón de control Selection Item (si la cuadrícula de datos es seleccionable)

El patrón de control Scroll Item (si la cuadrícula de datos es desplazable)

El patrón de control Table Item

Table Item (patrón de control)

Eventos de Automatización de la interfaz de


usuario necesarios
En la tabla siguiente se muestran los eventos de Automatización de la interfaz de
usuario que deben admitir todos los controles de cuadrícula de datos. Para más
información sobre eventos, vea UI Automation Events Overview.

Evento de Automatización de la Soporte Notas


interfaz de usuario técnico

AutomationFocusChangedEvent Obligatorio None

Evento cambiado por Obligatorio None


propiedadBoundingRectangleProperty .

Evento cambiado por Obligatorio None


propiedadIsEnabledProperty .

Evento cambiado por Obligatorio None


propiedadIsOffscreenProperty .

LayoutInvalidatedEvent Depende None

StructureChangedEvent Obligatorio None

Evento cambiado por Depende None


propiedadCurrentViewProperty .
Evento de Automatización de la Soporte Notas
interfaz de usuario técnico

Evento cambiado por Depende Si el control admite el patrón Scroll,


propiedadHorizontallyScrollableProperty . debe admitir este evento.

Evento cambiado por Depende Si el control admite el patrón Scroll,


propiedadHorizontalScrollPercentProperty debe admitir este evento.
.

Evento cambiado por Depende Si el control admite el patrón Scroll,


propiedadHorizontalViewSizeProperty . debe admitir este evento.

Evento cambiado por Depende Si el control admite el patrón Scroll,


propiedadVerticalScrollPercentProperty . debe admitir este evento.

Evento cambiado por Depende Si el control admite el patrón Scroll,


propiedadVerticallyScrollableProperty . debe admitir este evento.

Evento cambiado por Depende Si el control admite el patrón Scroll,


propiedadVerticalViewSizeProperty . debe admitir este evento.

InvalidatedEvent Obligatorio None

Ejemplo de tipo de control Date Grid


En la imagen siguiente se muestra un control List View que implementa el tipo de
control DataGrid.

Las vistas de control y de contenido del árbol de Automatización de la interfaz de


usuario que pertenece al control de vista de lista se muestran a continuación. Los
patrones de control de cada elemento de automatización se muestran entre paréntesis.

Árbol de Automatización de la interfaz de Árbol de Automatización de la interfaz de


usuario: vista de control usuario: vista de contenido
Árbol de Automatización de la interfaz de Árbol de Automatización de la interfaz de
usuario: vista de control usuario: vista de contenido

DataGrid (Table, Grid, Selection) DataGrid (Table, Grid, Selection)


Encabezado Group "Contoso" (TableItem, GridItem,
SelectionItem, Table*, Grid*)
HeaderItem "Name" (Invoke)
HeaderItem "Date Modified" (Invoke) DataItem "Accounts Receivable.doc"
HeaderItem "Size" (Invoke) (SelectionItem, Invoke, TableItem*,
Group "Contoso" (TableItem, GridItem, GridItem*)
SelectionItem, Table*, Grid*) DataItem "Accounts Payable.doc"
(SelectionItem, Invoke, TableItem*,
DataItem "Accounts Receivable.doc" GridItem*)
(SelectionItem, Invoke, TableItem*,
GridItem*)
DataItem "Accounts Payable.doc"
(SelectionItem, Invoke, TableItem*,
GridItem*)

* En el ejemplo anterior se muestra un elemento DataGrid que contiene varios niveles


de controles. El control Group ("Contoso") contiene dos controles DataItem ("Accounts
Receivable.doc" y "Accounts Payable.doc"). Un par de controles DataGrid/GridItem es
independiente de un par en otro nivel. Los controles DataItem de un elemento Group
también se pueden exponer como un tipo de control ListItem, lo que permite que se
presenten más claramente como objetos seleccionables, en lugar de como elementos
de datos simples. En este ejemplo no se incluyen los subelementos de los elementos de
datos agrupados.

Consulte también
DataGrid
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de UI Automation para
el tipo de control DataItem
Artículo • 11/04/2023

7 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 ofrece información sobre la compatibilidad de Automatización de la


interfaz de usuario de Microsoft con el tipo de control DataItem. En Automatización de
la interfaz de usuario, un tipo de control es un conjunto de condiciones que un control
debe cumplir para poder usar la propiedad ControlTypeProperty. Las condiciones
incluyen directrices específicas para la estructura de árbol de Automatización de la
interfaz de usuario, los valores de propiedad de Automatización de la interfaz de usuario
y los patrones de control.

Una entrada de una lista de contactos es un ejemplo de un control de elemento de


datos. Un control de elemento de datos contiene información de interés para un usuario
final. Es más complicado que el elemento de lista simple porque contiene información
más completa.

En las secciones siguientes se definen la estructura de árbol, las propiedades, los


patrones de control y los eventos para el tipo de control DataItem de Automatización
de la interfaz de usuario necesarios. Los requisitos de Automatización de la interfaz de
usuario se aplican a todos los controles de elemento de datos, ya sea Windows
Presentation Foundation (WPF), Win32 o Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
En la tabla siguiente se describe la vista de control y la vista de contenido del árbol de
Automatización de la interfaz de usuario que pertenece a los controles de elemento de
datos y se describe lo que puede incluirse en cada vista. Para más información sobre el
árbol de UI Automation, vea Información general del árbol de UI Automation.
Árbol de Automatización de la interfaz de Árbol de Automatización de la interfaz de
usuario: vista de control usuario: vista de contenido

DataItem DataItem

- Varía (0 o más; se puede estructurar en - Varía (0 o más; se puede estructurar en


jerarquía) jerarquía)

Un elemento de datos de una cuadrícula de datos puede hospedar diversos objetos,


entre los que se incluye otra capa de elementos de datos o elementos de cuadrícula
concretos como controles de edición, texto o imágenes. Si el elemento de datos tiene
un rol de objeto concreto, el elemento debe exponerse como un tipo de control
concreto; por ejemplo, un tipo de control ListItem para un elemento de datos
seleccionable de la cuadrícula.

Propiedades de Automatización de la interfaz


de usuario necesarias
En la tabla siguiente se muestran las propiedades que tienen un valor o una definición
que es especialmente relevante para los controles de elemento de datos. Para más
información sobre las propiedades de Automatización de la interfaz de usuario, vea
Propiedades de Automatización de la interfaz de usuario para clientes.

Propiedad Valor Notas

AutomationIdProperty Vea las El valor de esta propiedad debe ser único en todos
notas. los controles de una aplicación.

BoundingRectangleProperty Vea las El rectángulo exterior que contiene el control


notas. completo.

ClickablePointProperty Vea las Se admite si hay un rectángulo delimitador. Si no


notas. todos los puntos que se encuentran dentro del
rectángulo delimitador son seleccionables, y realiza
pruebas de aciertos especializadas, invalide y
ofrezca un punto en el que hacer clic.

ControlTypeProperty DataItem Este valor es el mismo para todos los marcos de


trabajo de la interfaz de usuario.

IsContentElementProperty True El control de elemento de datos siempre debe ser


contenido.

IsControlElementProperty True El control de elemento de datos siempre debe ser


un control.
Propiedad Valor Notas

IsKeyboardFocusableProperty Vea las Si el control puede recibir el foco del teclado, debe
notas. admitir esta propiedad.

ItemStatusProperty Vea las Si el control contiene un estado que se actualiza


notas. dinámicamente, se debe admitir esta propiedad
para que una tecnología de asistencia pueda recibir
actualizaciones cuando cambia el estado del
elemento.

ItemTypeProperty Vea las Este es el valor de cadena que transmite al usuario


notas. final el objeto subyacente que representa el
elemento. Algunos ejemplos son "Archivo
multimedia" o "Contacto".

LabeledByProperty Null Los controles de elemento de datos no tienen una


etiqueta de texto estático.

LocalizedControlTypeProperty "elemento Cadena localizada que corresponde al tipo de


de datos" control DataItem.

NameProperty Vea las El control de elemento de datos siempre contiene


notas. un elemento de texto principal que está relacionado
con lo que el usuario asociaría como el identificador
más semántico para el elemento.

Patrones de control de Automatización de la


interfaz de usuario necesarios
En la tabla siguiente se muestran los patrones de control de Automatización de la
interfaz de usuario de Microsoft que se deben admitir por todos los controles de
elemento de datos. Para más información sobre los patrones de control, vea UI
Automation Control Patterns Overview.

Patrón de control Soporte Notas


técnico

IExpandCollapseProvider Depende Si el elemento de datos se puede expandir o contraer para


mostrar y ocultar información, se debe admitir el patrón
ExpandCollapse.

IGridItemProvider Depende Los elementos de datos admitirán el patrón GridItem


cuando una colección de elementos de datos esté
disponible dentro de un contenedor en el que se pueda
navegar espacialmente de un elemento a otro.
Patrón de control Soporte Notas
técnico

IScrollItemProvider Depende Todos los elementos de datos admiten la capacidad de


desplazamiento para verlos con el patrón ScrollItem
cuando su contenedor de datos tiene más elementos de
los que caben en la pantalla.

ISelectionItemProvider Sí Todos los elementos de datos deben admitir el patrón


SelectionItem para indicar cuándo está seleccionado el
elemento.

ITableItemProvider Depende Si el elemento de datos contenido dentro de un tipo de


control DataGrid admitirá este patrón.

IToggleProvider Depende Si el elemento de datos contiene un estado que se puede


recorrer cíclicamente.

IValueProvider Depende Si el texto primario del elemento de datos es editable, se


debe admitir el patrón Value.

Trabajar con elementos de datos en listas


grandes
Las listas grandes suelen ser datos virtualizados dentro de marcos de la interfaz de
usuario para ayudar al rendimiento. Debido a esto, un cliente de Automatización de la
interfaz de usuario no puede usar la característica de consulta Automatización de la
interfaz de usuario para extraer el contenido del árbol completo de la misma manera en
que lo hace con otros contenedores de elementos. Un cliente debe desplazar el
elemento a la vista (o expandir el control para mostrar todas las opciones importantes)
antes de acceder al conjunto completo de información del elemento de datos.

Al llamar a SetFocus en el elemento de Automatización de la interfaz de usuario del


elemento de datos, el caso de Microsoft Windows Explorer devolverá correctamente y el
foco se establecerá en la edición dentro del subárbol del elemento de datos.

Eventos de Automatización de la interfaz de


usuario necesarios
En la siguiente tabla se muestran los eventos de Automatización de la interfaz de
usuario que deben admitir todos los controles de elemento de datos. Para más
información sobre eventos, vea UI Automation Events Overview.
Evento de Automatización de la interfaz de usuario Soporte técnico Notas

AutomationFocusChangedEvent Obligatorio None

Evento cambiado por propiedadBoundingRectangleProperty . Obligatorio None

Evento cambiado por propiedadIsEnabledProperty . Obligatorio None

Evento cambiado por propiedadIsOffscreenProperty . Obligatorio None

Evento cambiado por propiedadNameProperty . Obligatorio None

StructureChangedEvent Obligatorio None

InvokedEvent Depende None

Evento cambiado por propiedadExpandCollapseStateProperty . Depende None

ElementAddedToSelectionEvent Obligatorio None

ElementRemovedFromSelectionEvent Obligatorio None

ElementSelectedEvent Obligatorio None

Evento cambiado por propiedadToggleStateProperty . Depende None

Evento cambiado por propiedadValueProperty . Depende None

Ejemplo de tipo de control DataItem


En la imagen siguiente se muestra un tipo de control DataItem en un control List View
con compatibilidad con información completa para las columnas.

Las vistas de control y de contenido del árbol de Automatización de la interfaz de


usuario que pertenece al control de elemento de datos se muestran a continuación. Los
patrones de control de cada elemento de automatización se muestran entre paréntesis.
El grupo "Contoso" también forma parte de la cuadrícula del control de host Data Grid.

Árbol de Automatización de la interfaz de Árbol de Automatización de la interfaz de


usuario: vista de control usuario: vista de contenido
Árbol de Automatización de la interfaz de Árbol de Automatización de la interfaz de
usuario: vista de control usuario: vista de contenido

- Group "Contoso" (Table, Grid) - Group "Contoso" (Table, Grid)


- DataItem "Accounts Receivable.doc" - DataItem "Accounts Receivable.doc"
(TableItem, GridItem, SelectionItem, Invoke) (TableItem, GridItem, SelectionItem, Invoke)
- Image "Accounts Receivable.doc" - Image "Accounts Receivable.doc"
- Edit "Name" (TableItem, GridItem, Value - Edit "Name" (TableItem, GridItem, Value
"Accounts Receivable.doc") "Accounts Receivable.doc")
- Edit "Date modified" (TableItem, GridItem, - Edit "Date modified" (TableItem, GridItem,
Value "8/25/2006 3:29 PM") Value "8/25/2006 3:29 PM")
- Edit "Size" (GridItem, TableItem, Value "11.0 - Edit "Size" (GridItem, TableItem, Value "11.0
KB) KB)
- DataItem "Accounts Payable.doc" (TableItem, - DataItem "Accounts Payable.doc" (TableItem,
GridItem, SelectionItem, Invoke) GridItem, SelectionItem, Invoke)
- ... -…

Si una cuadrícula representa una lista de elementos seleccionables, los elementos de la


interfaz de usuario correspondientes se pueden exponer con el tipo de control ListItem
en lugar del tipo de control DataItem. En el ejemplo anterior, los elementos DataItem
("Accounts Receivable.doc" y "Accounts Payable.doc") de Group ("Contoso") se pueden
mejorar si se exponen como tipos de control ListItem, porque ese tipo ya admite el
patrón de control SelectionItem.

Consulte también
DataItem
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de UI Automation para
el tipo de control Document
Artículo • 10/05/2023

7 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 ofrece información sobre la compatibilidad de UI Automation con el


tipo de control de texto. En UI Automation, un tipo de control es un conjunto de
condiciones que un control debe cumplir para poder usar la propiedad
ControlTypeProperty. Las condiciones incluyen directrices específicas para la estructura
de árbol de Automatización de la interfaz de usuario, los valores de propiedad de
Automatización de la interfaz de usuario y los patrones de control.

Los controles de documento permiten a un usuario ver y manipular varias páginas de


texto. A diferencia de los controles de edición que solo admiten una línea simple de
texto sin formato, los controles de documento pueden hospedar texto con estilo y
formato enriquecidos.

En las secciones siguientes se definen la estructura de árbol, las propiedades, los


patrones de control y los eventos para el tipo de control de documentación de UI
Automation necesarios. Los requisitos de Automatización de la interfaz de usuario se
aplican a todos los controles de documentación, ya sea Windows Presentation
Foundation (WPF), Win32 o Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
En la tabla siguiente se describe la vista de control y la vista de contenido del árbol de
UI Automation que pertenece a los controles de documentación y se describe lo que
puede incluirse en cada vista. Para más información sobre el árbol de UI Automation,
vea Información general del árbol de UI Automation.
Vista de control Vista de contenido

Documento Documento

- Varía - Varía

Propiedades de Automatización de la interfaz


de usuario necesarias
En la tabla siguiente se muestran las propiedades de Automatización de la interfaz de
usuario cuyo valor o definición es especialmente relevante para los controles de
documentación. Para más información sobre las propiedades de automatización de la
interfaz de usuario, consulte Propiedades de automatización de la interfaz de usuario:
Propiedades para clientes.

Propiedad de Valor Notas


automatización de interfaz
de usuario

AutomationIdProperty Vea las El valor de esta propiedad debe ser único en


notas. todos los controles de una aplicación.

BoundingRectangleProperty Vea las El rectángulo exterior que contiene el control


notas. completo.

ClickablePointProperty Vea las El documento tiene un punto en el que se puede


notas. hacer clic que provocará que el foco pase al
documento de uno de sus elementos del
contenedor de documento.

ControlTypeProperty Documento Este valor es el mismo para todos los marcos de


trabajo de la interfaz de usuario.

IsContentElementProperty True El control de documentación siempre se incluye


en la vista de contenido del árbol de UI
Automation.

IsControlElementProperty True El control de documentación siempre se incluye


en la vista de control del árbol de UI Automation.

IsKeyboardFocusableProperty Vea las Si el control puede recibir el foco del teclado,


notas. debe admitir esta propiedad.

LabeledByProperty Vea las El valor de esta propiedad debe ser la etiqueta


notas. del control de documento. Normalmente, se
utiliza el título del documento.
Propiedad de Valor Notas
automatización de interfaz
de usuario

LocalizedControlTypeProperty "documento" Cadena localizada que corresponde al tipo de


control Document.

NameProperty Vea las El control de documento normalmente recibe sus


notas. nombres del nombre de archivo desde el que se
carga. A menudo, esto se muestra en el título de
un marco o una ventana contenedora.

Patrones de control de Automatización de la


interfaz de usuario necesarios
En la tabla siguiente se muestran los patrones de control de automatización de la
interfaz de usuario que se deben admitir por los controles de documentación. Para más
información sobre los patrones de control, vea UI Automation Control Patterns
Overview.

Patrón de Soporte Notas


control técnico

IScrollProvider Depende El control de documento puede abarcar más de lo que puede la


ventanilla. El control debe admitir el patrón de control Scroll si el
contenido es desplazable.

ITextProvider Obligatorio El control de documento puede abarcar más de lo que puede la


ventanilla. El control debe admitir el patrón de control Scroll si el
contenido es desplazable.

IValueProvider Nunca El control de documento no admite este patrón de control porque


el contenido del control a menudo abarca más de una página. Los
clientes de Automatización de la interfaz de usuario deben usar
TextPattern para obtener información de texto sobre un
documento.

Eventos de Automatización de la interfaz de


usuario necesarios
En la tabla siguiente se muestran los eventos de UI Automation que se deben admitir
por parte de todos los controles de documentación. Para más información sobre
eventos, vea UI Automation Events Overview.
Evento de Automatización de la Soporte Notas
interfaz de usuario técnico

AutomationFocusChangedEvent Obligatorio None

Evento cambiado por Obligatorio None


propiedadBoundingRectangleProperty .

Evento cambiado por Obligatorio None


propiedadIsEnabledProperty .

Evento cambiado por Obligatorio None


propiedadIsOffscreenProperty .

StructureChangedEvent Obligatorio None

Evento cambiado por Obligatorio None


propiedadHorizontallyScrollableProperty .

Evento cambiado por Obligatorio None


propiedadHorizontalScrollPercentProperty
.

Evento cambiado por Obligatorio None


propiedadHorizontalViewSizeProperty .

Evento cambiado por Obligatorio None


propiedadVerticalScrollPercentProperty .

Evento cambiado por Obligatorio None


propiedadVerticallyScrollableProperty .

Evento cambiado por Obligatorio None


propiedadVerticalViewSizeProperty .

InvalidatedEvent Depende Si el control admite el patrón de


control Selection, debe admitir este
evento.

TextSelectionChangedEvent Obligatorio None

TextChangedEvent Obligatorio None

Evento cambiado por Nunca None


propiedadValueProperty .

Consulte también
Document
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de UI Automation para
el tipo de control Edit
Artículo • 10/05/2023

7 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.

Este tema proporciona información sobre la compatibilidad de la UI Automation con el


tipo de control de edición. En UI Automation, un tipo de control es un conjunto de
condiciones que un control debe cumplir para poder usar la propiedad
ControlTypeProperty. Las condiciones incluyen directrices específicas para la estructura
de árbol de Automatización de la interfaz de usuario, los valores de propiedad de
Automatización de la interfaz de usuario y los patrones de control.

Los controles de edición habilitan a un usuario para que vea y edite una línea de texto
simple sin compatibilidad con formato enriquecido.

En las secciones siguientes se definen la estructura de árbol, las propiedades, los


patrones de control y los eventos para el tipo de control de edición de UI Automation
necesarios. Los requisitos de UI Automation se aplican a todos los controles de edición,
ya sea Windows Presentation Foundation (WPF), Win32 o Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
En la tabla siguiente se describe la vista de control y la vista de contenido del árbol de
UI Automation que pertenece a los controles de edición y se describe lo que puede
incluirse en cada vista. Para más información sobre el árbol de UI Automation,consulte
Introducción al árbol de UI Automation.

Vista de control Vista de contenido

Editar Editar
Los controles que implementan el tipo de control Edit no tendrán barras de
desplazamiento en la vista de control del árbol UI Automation porque es un control de
línea única. La única línea de texto puede encapsularse en algunos escenarios de diseño.
El tipo de control Edit es idóneo para contener pequeñas cantidades de texto editable o
seleccionable.

Propiedades de Automatización de la interfaz


de usuario necesarias
En la tabla siguiente se muestran las propiedades de Automatización de la interfaz de
usuario cuyo valor o definición es especialmente relevante para los controles de edición.
Para más información sobre las propiedades de automatización de la interfaz de
usuario, consulte Propiedades de automatización de la interfaz de usuario para clientes.

Propiedad de Valor Notas


automatización de interfaz
de usuario

AutomationIdProperty Vea las El valor de esta propiedad debe ser único en todos
notas. los controles de una aplicación.

BoundingRectangleProperty Vea las El rectángulo exterior que contiene el control


notas. completo.

ClickablePointProperty Vea las El control de edición debe tener un punto en el que


notas. se pueda hacer clic que dé enfoque de entrada a la
parte de edición del control cuando un usuario hace
clic en el mouse allí.

IsKeyboardFocusableProperty Vea las Si el control puede recibir el foco del teclado, debe
notas. admitir esta propiedad.

NameProperty Vea las El nombre del control de edición se genera


notas. normalmente desde una etiqueta de texto estático. Si
no hay ninguna etiqueta de texto estático, el
desarrollador de aplicaciones debe asignar un valor
de propiedad para Name . La propiedad Name nunca
debe incluir el contenido textual del control de
edición.

LabeledByProperty Vea las Si hay una etiqueta de texto estático asociada al


notas. control, esta propiedad debe exponer una referencia
a ese control. Si el control de texto es un
subcomponente de otro control, no tendrá un
conjunto de propiedades LabeledBy .
Propiedad de Valor Notas
automatización de interfaz
de usuario

ControlTypeProperty Editar Este valor es el mismo para todos los marcos de


trabajo de la interfaz de usuario.

LocalizedControlTypeProperty "edición" Cadena localizada que corresponde al tipo de control


Edit.

IsContentElementProperty True El control de edición siempre se incluye en la vista de


contenido del árbol de UI Automation.

IsControlElementProperty True El control de edición siempre se incluye en la vista de


control del árbol de UI Automation.

IsPasswordProperty Vea las Debe establecerse en true en controles de edición


notas. que contienen contraseñas. Si un control de edición
contiene el contenido de la contraseña, esta
propiedad se puede usar por un lector de pantalla
para determinar si las pulsaciones de teclas se deben
leer cuando el usuario las introduce.

Propiedades y patrones de control de


Automatización de la interfaz de usuario
necesarios
En la tabla siguiente se muestran los patrones de control que se deben admitir por
todos los controles de edición. Para más información sobre los patrones de control, vea
UI Automation Control Patterns Overview.

Patrón de Soporte Notas


control/propiedad técnico/valor
de patrón de
control

ITextProvider Depende Los controles de edición deben admitir el patrón de


control Text porque siempre debe haber información de
texto detallada disponible para los clientes.

IValueProvider Depende Todos los controles de edición que toman una cadena
deben exponer el patrón Value.

IsReadOnly Vea las notas. Se debe establecer esta propiedad para indicar si el
control puede tener un valor establecido mediante
programación o si es editable por el usuario.
Patrón de Soporte Notas
control/propiedad técnico/valor
de patrón de
control

Value Vea las notas. Esta propiedad devolverá el contenido textual del control
de edición. Si la IsPasswordProperty se establece en true ,
esta propiedad debe provocar una
InvalidOperationException cuando se solicite.

IRangeValueProvider Depende Todos los controles de edición que toman un intervalo


numérico deben exponer el patrón de control Range
Value.

Minimum Vea las notas. Esta propiedad debe ser el valor mínimo en el que se
puede establecer el contenido del control de edición.

Maximum Vea las notas. Esta propiedad debe ser el valor máximo en el que se
puede establecer el contenido del control de edición.

SmallChange Vea las notas. Esta propiedad debe indicar el número de posiciones
decimales en el que se puede establecer el valor. Si la
edición solo acepta enteros, la SmallChangeProperty debe
ser 1. Si la edición acepta un intervalo de entre 1,0 y 2,0,
la SmallChangeProperty debe ser 0,1. Si el control de
edición acepta un intervalo de entre 1,0 y 2,0, la
SmallChangeProperty debe ser 0,001.

LargeChange Null Esta propiedad no necesita exponerse en un control de


edición.

Value Vea las notas. Esta propiedad indicará el contenido numérico del control
de edición. Cuando se establece un valor más preciso por
un cliente de UI Automation dentro de los intervalos
especificados en las propiedades Minimum y Maximum , la
propiedad Value se redondeará automáticamente al valor
aceptado más cercano.

Eventos de Automatización de la interfaz de


usuario necesarios
En la tabla siguiente se muestran los eventos de UI Automation que se deben admitir
por parte de todos los controles de edición. Para más información sobre eventos, vea UI
Automation Events Overview.

Evento de Automatización de la Soporte Notas


interfaz de usuario técnico
Evento de Automatización de la Soporte Notas
interfaz de usuario técnico

InvalidatedEvent Obligatorio None

TextSelectionChangedEvent Obligatorio None

TextChangedEvent Obligatorio None

Evento cambiado por Obligatorio None


propiedadBoundingRectangleProperty .

Evento cambiado por Obligatorio None


propiedadIsOffscreenProperty .

Evento cambiado por Obligatorio None


propiedadIsEnabledProperty .

Evento cambiado por Obligatorio None


propiedadNameProperty .

Evento cambiado por Depende None


propiedadValueProperty .

Evento cambiado por Nunca None


propiedadHorizontallyScrollableProperty .

Evento cambiado por Nunca None


propiedadHorizontalScrollPercentProperty
.

Evento cambiado por Nunca None


propiedadHorizontalViewSizeProperty .

Evento cambiado por Nunca None


propiedadVerticalScrollPercentProperty .

Evento cambiado por Nunca None


propiedadVerticallyScrollableProperty .

Evento cambiado por Nunca None


propiedadVerticalViewSizeProperty .

Evento cambiado por Depende Si el control admite el patrón de


propiedadValueProperty . control Range Value, debe admitir este
evento.

AutomationFocusChangedEvent Obligatorio None

StructureChangedEvent Obligatorio None


Consulte también
Edit
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de UI Automation para
el tipo de control Group
Artículo • 10/05/2023

7 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 ofrece información sobre la compatibilidad de UI Automation con el


tipo de control Group. En Automatización de la interfaz de usuario, un tipo de control es
un conjunto de condiciones que un control debe cumplir para poder usar la propiedad
ControlTypeProperty. Las condiciones incluyen directrices específicas para la estructura
de árbol de Automatización de la interfaz de usuario, los valores de propiedad de
Automatización de la interfaz de usuario y los eventos de Automatización de la interfaz
de usuario.

El control de grupo representa un nodo dentro de una jerarquía. El tipo de control


Group crea una separación en el árbol de Automatización de la interfaz de usuario para
que los elementos agrupados juntos tengan una división lógica dentro del árbol de
Automatización de la interfaz de usuario.

En las secciones siguientes se definen la estructura de árbol, las propiedades, los


patrones de control y los eventos para el tipo de control Group de Automatización de la
interfaz de usuario necesarios. Los requisitos de Automatización de la interfaz de
usuario se aplican a todos los controles de grupo, ya sea Windows Presentation
Foundation (WPF), Win32 o Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
En la tabla siguiente se describe la vista de control y la vista de contenido del árbol de
Automatización de la interfaz de usuario que pertenece a los controles de grupo y se
describe lo que puede incluirse en cada vista. Para más información sobre el árbol de
Automatización de la interfaz de usuario, consulte Introducción al árbol de
Automatización de la interfaz de usuario.

Vista de control Vista de contenido

Group (Grupo) Group (Grupo)

- 0 o varios controles - 0 o varios controles

Normalmente, los controles de grupo tendrán la compatibilidad de Automatización de


la interfaz de usuario con el tipo de control ListItem, compatibilidad de Automatización
de la interfaz de usuario con el tipo de control TreeItem o compatibilidad de
Automatización de la interfaz de usuario con el tipo de control DataItem que se
encuentran debajo de ellos en el subárbol. Como 'Group' es un contenedor genérico, es
posible que cualquier tipo de control se encuentre por debajo el control Group en el
árbol.

Propiedades de Automatización de la interfaz


de usuario necesarias
En la tabla siguiente se muestran las propiedades de Automatización de la interfaz de
usuario cuyo valor o definición es especialmente relevante para los controles de grupo.
Para más información sobre las propiedades de Automatización de la interfaz de
usuario, consulte Propiedades de Automatización de la interfaz de usuario para clientes.

Propiedad de Valor Notas


automatización de interfaz
de usuario

AutomationIdProperty Vea las El valor de esta propiedad debe ser único en todos los
notas. controles de una aplicación.

BoundingRectangleProperty Vea las El rectángulo exterior que contiene el control


notas. completo.

ClickablePointProperty Vea las Se admite si hay un rectángulo delimitador. Si no


notas. todos los puntos que se encuentran dentro del
rectángulo delimitador son seleccionables, y realiza
pruebas de aciertos especializadas, invalide y ofrezca
un punto en el que hacer clic.

IsKeyboardFocusableProperty Vea las Si el control puede recibir el foco del teclado, debe
notas. admitir esta propiedad.
Propiedad de Valor Notas
automatización de interfaz
de usuario

NameProperty Vea las El control de grupo suele recibir su nombre del texto
notas. que etiqueta el control.

LabeledByProperty Vea las Los controles de grupo suelen etiquetarse


notas. automáticamente. En estos casos, se devuelve null
aquí. Si hay una etiqueta de texto estático para el
grupo, se debe devolver como el valor de la propiedad
LabeledBy.

ControlTypeProperty Group Este valor es el mismo para todos los marcos de


(Grupo) trabajo de la interfaz de usuario.

LocalizedControlTypeProperty "grupo" Cadena localizada que corresponde al tipo de control


Group.

IsContentElementProperty True El control de grupo siempre se incluye en la vista de


contenido del árbol de Automatización de la interfaz
de usuario.

IsControlElementProperty True El control de grupo siempre se incluye en la vista de


control del árbol de Automatización de la interfaz de
usuario.

Patrones de control de Automatización de la


interfaz de usuario necesarios
En la tabla siguiente se enumeran los patrones de control Automatización de la interfaz
de usuario que se deben admitir para el tipo de control Group. Para más información
sobre los patrones de control, vea UI Automation Control Patterns Overview.

Patrón de control Soporte Notas


técnico

IExpandCollapseProvider Depende Los controles de grupo que pueden utilizarse para mostrar
u ocultar información deben admitir el patrón
ExpandCollapse.

Eventos de Automatización de la interfaz de


usuario necesarios
En la tabla siguiente se muestran los eventos de Automatización de la interfaz de
usuario que deben admitir todos los controles de grupo. Para más información sobre
eventos, vea UI Automation Events Overview.

Evento de Automatización de la interfaz de usuario Soporte técnico Notas

Evento cambiado por propiedadBoundingRectangleProperty . Obligatorio None

Evento cambiado por propiedadIsOffscreenProperty . Obligatorio None

Evento cambiado por propiedadIsEnabledProperty . Obligatorio None

Evento cambiado por propiedadExpandCollapseStateProperty . Depende None

Evento cambiado por propiedadToggleStateProperty . Depende None

AutomationFocusChangedEvent Obligatorio None

StructureChangedEvent Obligatorio None

Consulte también
Group
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de UI Automation para
el tipo de control Header
Artículo • 09/05/2023

7 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 ofrece información sobre la compatibilidad de Automatización de la


interfaz de usuario con el tipo de control de encabezado. En UI Automation, un tipo de
control es un conjunto de condiciones que un control debe cumplir para poder usar la
propiedad ControlTypeProperty. Las condiciones incluyen directrices específicas para la
estructura de árbol de UI Automation, los valores de propiedad de automatización de la
interfaz de usuario y los patrones de control.

El control de encabezado proporciona un contenedor visual para las etiquetas de filas o


columnas de información.

Las siguientes secciones definen la estructura de árbol de automatización de UI


Automation, las propiedades, los patrones de control y los eventos para el tipo de
control de encabezado. Los requisitos de UI Automation se aplican a todos los controles
de encabezado de número, ya sea Windows Presentation Foundation (WPF), Win32 o
Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
En la tabla siguiente se describe la vista de control y la vista de contenido del árbol de
Automatización de la interfaz de usuario que pertenece a los controles del encabezado
y se describe lo que puede incluirse en cada vista. Para más información sobre el árbol
de UI Automation, vea Información general del árbol de UI Automation.

Vista de control Vista de contenido


Vista de control Vista de contenido

Encabezado None

- HeaderItem (1 o más)

Los controles de encabezado siempre tienen 1 o más elementos secundarios en la vista


de control del árbol de UI Automation.

Los controles de encabezado tienen cero elementos secundarios en la vista de


contenido del árbol de UI Automation.

Propiedades de Automatización de la interfaz


de usuario necesarias
En la tabla siguiente se muestran las propiedades de automatización de la interfaz de
usuario cuyo valor o definición es especialmente relevante para los controles de
encabezado. Para más información sobre las propiedades de automatización de la
interfaz de usuario, vea Propiedades de UI Automation para clientes.

Propiedad de Valor Notas


automatización de interfaz
de usuario

AutomationIdProperty Vea las notas. El valor de esta propiedad debe ser único en
todos los controles de una aplicación.

BoundingRectangleProperty Vea las notas. El rectángulo exterior que contiene el control


completo.

ClickablePointProperty Vea las notas. Se admite si hay un rectángulo delimitador. Si no


todos los puntos que se encuentran dentro del
rectángulo delimitador son seleccionables, y
realiza pruebas de aciertos especializadas,
invalide y ofrezca un punto en el que hacer clic.

IsKeyboardFocusableProperty Vea las notas. Si el control puede recibir el foco del teclado,
debe admitir esta propiedad.

NameProperty Vea las notas. El control de encabezado necesita un nombre si


hay más de un encabezado de fila o más de un
encabezado de columna. Esto identifica la
información dentro del encabezado.

LabeledByProperty Null . Los controles de encabezado no tienen una


etiqueta estática.
Propiedad de Valor Notas
automatización de interfaz
de usuario

ControlTypeProperty Encabezado Este valor es el mismo para todos los marcos de


trabajo de la interfaz de usuario.

LocalizedControlTypeProperty "encabezado" Este valor es el mismo para todos los marcos de


trabajo de la interfaz de usuario.

OrientationProperty Horizontal El valor de esta propiedad expone la posición del


control de encabezado: tanto si es un
encabezado de fila, como un encabezado de
columna.

IsContentElementProperty False El control de encabezado no se incluye en la


vista de contenido del árbol de la
automatización de la interfaz de usuario.

IsControlElementProperty True El control de encabezado siempre se incluye en


la vista de control del árbol de automatización
de la interfaz de usuario.

Patrones de control de Automatización de la


interfaz de usuario necesarios
En la tabla siguiente se muestran los patrones de control de automatización de la
interfaz de usuario que se deben admitir por todos los controles de encabezado. Para
más información sobre los patrones de control, vea UI Automation Control Patterns
Overview.

Patrón de control Soporte Notas


técnico

ITransformProvider Depende Implemente este patrón de control si se puede cambiar el


tamaño del control de encabezado.

Eventos de Automatización de la interfaz de


usuario necesarios
En la siguiente tabla se muestra los eventos de Automatización de la interfaz de usuario
requeridos para ser admitidos por todos los controles de encabezado. Para más
información sobre los eventos, vea UI Automation Events Overview.
Evento de Automatización de la interfaz de usuario Soporte técnico Notas

Evento cambiado por propiedadBoundingRectangleProperty . Obligatorio None

Evento cambiado por propiedadIsOffscreenProperty . Obligatorio None

Evento cambiado por propiedadIsEnabledProperty . Obligatorio None

AutomationFocusChangedEvent Obligatorio None

StructureChangedEvent Obligatorio None

Consulte también
Header
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de la UI Automation
para el tipo de control HeaderItem
Artículo • 10/05/2023

7 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 ofrece información sobre la compatibilidad de Automatización de la


interfaz de usuario con el tipo de control HeaderItem. En Automatización de la interfaz
de usuario, un tipo de control es un conjunto de condiciones que un control debe
cumplir para poder usar la propiedad ControlTypeProperty. Las condiciones incluyen
directrices específicas para la estructura de árbol de Automatización de la interfaz de
usuario, los valores de propiedad de automatización de la interfaz de usuario y los
patrones de control.

El tipo de control HeaderItem proporciona una etiqueta visual para una fila o una
columna de información.

Los controles de elemento de encabezado son ejemplos de controles que implementan


el tipo de control HeaderItem. Los requisitos de automatización de la interfaz de usuario
de las secciones siguientes se aplican a todos los controles de encabezado, ya sea
Windows Presentation Foundation (WPF), Win32 o Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
En la tabla siguiente se describe la vista de control y la vista de contenido del árbol de
Automatización de la interfaz de usuario que pertenece a los controles de elemento del
encabezado y se describe lo que puede incluirse en cada vista. Para más información
sobre el árbol de automatización de la interfaz de usuario, vea Información general del
árbol de automatización de la interfaz de usuario.

Vista de control Vista de contenido


Vista de control Vista de contenido

HeaderItem None

Propiedades de Automatización de la interfaz


de usuario necesarias
En la tabla siguiente se muestran las propiedades de automatización de la interfaz de
usuario cuyo valor o definición es especialmente relevante para los controles de
elemento de encabezado. Para más información sobre las propiedades de
automatización de la interfaz de usuario, vea Propiedades de automatización de la
interfaz de usuario para clientes.

Propiedad de Valor Notas


automatización de interfaz
de usuario

AutomationIdProperty Vea las El valor de esta propiedad debe ser único en


notas. todos los controles de una aplicación.

BoundingRectangleProperty Vea las El rectángulo exterior que contiene el control


notas. completo.

ClickablePointProperty Vea las Se admite si hay un rectángulo delimitador. Si no


notas. todos los puntos que se encuentran dentro del
rectángulo delimitador son seleccionables, y
realiza pruebas de aciertos especializadas,
invalide y ofrezca un punto en el que hacer clic.

IsKeyboardFocusableProperty Vea las Si el control puede recibir el foco del teclado,


notas. debe admitir esta propiedad.

NameProperty Vea las El control de elemento de encabezado siempre se


notas. etiqueta automáticamente.

LabeledByProperty Null . Los controles de elemento de encabezado no


tienen una etiqueta de texto estático.

ControlTypeProperty HeaderItem Este valor es el mismo para todos los marcos de


trabajo de la interfaz de usuario.

LocalizedControlTypeProperty "elemento Cadena localizada para el tipo de control


de HeaderItem.
encabezado"
Propiedad de Valor Notas
automatización de interfaz
de usuario

IsContentElementProperty False El control de elemento de encabezado no se


incluye en la vista de contenido del árbol de la
automatización de la interfaz de usuario.

IsControlElementProperty True El control del elemento de encabezado siempre


se incluye en la vista de control del árbol de
automatización de la interfaz de usuario.

ItemStatusProperty Vea las Esta propiedad ofrece información para los


notas. criterios de ordenación mediante el elemento de
encabezado.

Patrones de control de Automatización de la


interfaz de usuario necesarios
En la tabla siguiente se muestran los patrones de control de automatización de la
interfaz de usuario que se deben admitir por todos los controles de elemento del
encabezado. Para más información sobre los patrones de control, vea UI Automation
Control Patterns Overview.

Patrón de control Soporte Notas


técnico

ITransformProvider Depende Implemente este patrón de control si se puede cambiar el


tamaño del control de elemento de encabezado.

IInvokeProvider Depende Implemente este patrón de control si se puede hacer clic en el


control de elemento de encabezado para ordenar los datos.

Eventos de Automatización de la interfaz de


usuario necesarios
En la siguiente tabla se muestra los eventos de Automatización de la interfaz de usuario
requeridos para ser admitidos por todos los controles de elemento del encabezado.
Para más información sobre los eventos, vea UI Automation Events Overview.

Evento de Automatización de la interfaz de usuario Soporte técnico Notas

InvokedEvent Depende None


Evento de Automatización de la interfaz de usuario Soporte técnico Notas

Evento cambiado por propiedadBoundingRectangleProperty . Obligatorio None

Evento cambiado por propiedadIsOffscreenProperty . Obligatorio None

Evento cambiado por propiedadIsEnabledProperty . Obligatorio None

AutomationFocusChangedEvent Obligatorio None

StructureChangedEvent Obligatorio None

Consulte también
HeaderItem
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de UI Automation para
el tipo de control Hyperlink
Artículo • 10/05/2023

7 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 ofrece información sobre la compatibilidad de Automatización de la


interfaz de usuario con el tipo de control Hyperlink. En Automatización de la interfaz de
usuario, un tipo de control es un conjunto de condiciones que un control debe cumplir
para poder usar la propiedad ControlTypeProperty. Las condiciones incluyen directrices
específicas para la estructura de árbol de Automatización de la interfaz de usuario, los
valores de propiedad de Automatización de la interfaz de usuario y los patrones de
control.

Los controles de hipervínculo permiten que los usuarios puedan navegar dentro de una
página, de una página a otra y que abran ventanas.

En las secciones siguientes se definen la estructura de árbol, las propiedades, los


patrones de control y los eventos para el tipo de control Hyperlink de Automatización
de la interfaz de usuario necesarios. Los requisitos de Automatización de la interfaz de
usuario se aplican a todos los controles de hipervínculo, ya sea Windows Presentation
Foundation (WPF), Win32 o Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
En la tabla siguiente se describe la vista de control y la vista de contenido del árbol de
Automatización de la interfaz de usuario que pertenece a los controles de hipervínculo y
se describe lo que puede incluirse en cada vista. Para más información sobre el árbol de
Automatización de la interfaz de usuario,consulte Introducción al árbol de
Automatización de la interfaz de usuario.
Vista de control Vista de contenido

Hyperlink Hyperlink

Propiedades de Automatización de la interfaz


de usuario necesarias
En la tabla siguiente se muestran las propiedades de Automatización de la interfaz de
usuario que tienen un valor o una definición que es especialmente relevante para el tipo
de control Hyperlink. Para más información sobre las propiedades de Automatización de
la interfaz de usuario, consulte Propiedades de Automatización de la interfaz de usuario:
Propiedades para clientes.

Propiedad de Valor Notas


automatización de interfaz
de usuario

AutomationIdProperty Vea las notas. El valor de esta propiedad debe ser único en
todos los controles de una aplicación.

BoundingRectangleProperty Vea las notas. El rectángulo exterior que contiene el control


completo.

ClickablePointProperty Vea las notas. Se admite si hay un rectángulo delimitador. Si


no todos los puntos que se encuentran dentro
del rectángulo delimitador son seleccionables, y
realiza pruebas de aciertos especializadas,
invalide y ofrezca un punto en el que hacer clic.

IsKeyboardFocusableProperty Vea las notas. Si el control puede recibir el foco del teclado,
debe admitir esta propiedad.

NameProperty Vea las notas. El nombre del control de hipervínculo es el texto


que se muestra en la pantalla como subrayado.

ClickablePointProperty Vea las notas. El punto donde hacer clic del control de
hipervínculo debe ser un punto que inicie el
hipervínculo si hace clic con el puntero del
mouse.

LabeledByProperty Vea las notas. Si hay una etiqueta de texto estático, esta
propiedad debe exponer una referencia a ese
control.

ControlTypeProperty Hyperlink Este valor es el mismo para todos los marcos de


trabajo de la interfaz de usuario.
Propiedad de Valor Notas
automatización de interfaz
de usuario

LocalizedControlTypeProperty "hipervínculo" Cadena localizada que corresponde al tipo de


control Hyperlink.

IsContentElementProperty True El control de hipervínculo siempre se incluye en


la vista de contenido del árbol de
Automatización de la interfaz de usuario.

IsControlElementProperty True El control de hipervínculo siempre se incluye en


la vista de control del árbol de Automatización
de la interfaz de usuario.

Propiedades y patrones de control de


Automatización de la interfaz de usuario
necesarios
En la tabla siguiente se muestran los patrones de control de Automatización de la
interfaz de usuario necesarios para que todos los controles de hipervínculo los admitan.
Para más información sobre los patrones de control, vea UI Automation Control Patterns
Overview.

Patrón de Soporte Notas


control/Propiedad técnico/valor
de patrón

IInvokeProvider Sí Todos los controles de hipervínculo deben admitir el


patrón Invoke.

IValueProvider Depende Los controles de hipervínculo deben admitir el patrón


de control Value si el vínculo contiene información
que es utilizable y significativa para el usuario.

Value Por ejemplo: Una dirección URL para una dirección de Internet o
"https://www...." Intranet es un ejemplo de un hipervínculo que
contiene información significativa para el usuario. Sin
embargo, un vínculo programático solo es
significativo para una aplicación y no se recomienda
para la propiedad Value.
Eventos de Automatización de la interfaz de
usuario necesarios
En la tabla siguiente se muestran los eventos de Automatización de la interfaz de
usuario necesarios para que todos los controles de hipervínculo los admitan. Para más
información sobre los eventos, vea UI Automation Events Overview.

Evento de Automatización de la interfaz de usuario Soporte técnico Notas

InvokedEvent Obligatorio None

Evento cambiado por propiedadBoundingRectangleProperty . Obligatorio None

Evento cambiado por propiedadIsOffscreenProperty . Obligatorio None

Evento cambiado por propiedadIsEnabledProperty . Obligatorio None

AutomationFocusChangedEvent Obligatorio None

StructureChangedEvent Obligatorio None

Consulte también
Hyperlink
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de UI Automation para
el tipo de control Image
Artículo • 09/05/2023

7 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.

Este tema proporciona información sobre la compatibilidad de la UI Automation con el


tipo de control Image. En UI Automation, un tipo de control es un conjunto de
condiciones que un control debe cumplir para poder usar la propiedad
ControlTypeProperty. Las condiciones incluyen directrices específicas para la estructura
de árbol de UI Automation, los valores de propiedad de esta y los patrones de control.

Los controles de imagen usados como iconos, gráficos informativos y gráficos admitirán
el tipo de control Image. Los controles usados como imágenes de marca de agua o de
fondo no admitirán el tipo de control Image.

En las secciones siguientes se definen la estructura de árbol, las propiedades, los


patrones de control y los eventos para el tipo de control Image de UI Automation
necesarios. Los requisitos de UI Automation se aplican a todos los controles Image, ya
sea Windows Presentation Foundation (WPF), Win32 o Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
En la tabla siguiente se describe la vista de control y la vista de contenido del árbol de
UI Automation que pertenece a los controles de Image y se describe lo que puede
incluirse en cada vista. Para más información sobre el árbol de UI Automation, vea
Información general del árbol de UI Automation.

Vista de Vista de contenido


control
Vista de Vista de contenido
control

Imagen Imagen (depende de si la imagen contiene información (según el valor de la


propiedad IsContentElement ))

Propiedades de Automatización de la interfaz


de usuario necesarias
La siguiente tabla enumera las propiedades de UI Automation cuyo valor o definición es
especialmente relevante para el tipo de control de Image. Para más información sobre
las propiedades de UI Automation, consulte Propiedades de automatización de la
interfaz de usuario para clientes.

Propiedad de Valor Notas


automatización de interfaz
de usuario

AutomationIdProperty Vea las El valor de esta propiedad debe ser único en todos
notas. los controles de una aplicación.

BoundingRectangleProperty Vea las El rectángulo exterior que contiene el control


notas. completo.

ClickablePointProperty Vea las Un punto donde se puede hacer clic del control de
notas. imagen debe ser un punto dentro del rectángulo
delimitador del control de imagen.

IsKeyboardFocusableProperty Vea las Si el control puede recibir el foco del teclado, debe
notas. admitir esta propiedad.

NameProperty Vea las La propiedad Name se debe exponer para todos los
notas. controles de imagen que contienen información. El
acceso mediante programación a esta información
requiere que se ofrezca un equivalente textual al
gráfico. Si el control de imagen es puramente
decorativo, únicamente debe aparecer en la vista de
control del árbol de UI Automation y no es necesario
que tenga un nombre. Los marcos de trabajo de
interfaz de usuario deben admitir propiedad de texto
alternativo o ALT en las imágenes que se pueden
establecer desde dentro de su marco de trabajo. Esta
propiedad se asignará entonces a la propiedad de
nombre de UI Automation.

LabeledByProperty Vea las Si hay una etiqueta de texto estático, esta propiedad
notas. debe exponer una referencia a ese control.
Propiedad de Valor Notas
automatización de interfaz
de usuario

ControlTypeProperty Imagen Este valor es el mismo para todos los marcos de


trabajo de la interfaz de usuario.

LocalizedControlTypeProperty "imagen" Cadena localizada que corresponde al tipo de control


Image.

IsContentElementProperty Vea las El control de imagen debe incluirse en la vista de


notas. contenido del árbol de UI Automation cuando
contiene información significativa aún no expuesta al
usuario final.

IsControlElementProperty True El control de image siempre se incluye en la vista de


control del árbol de UI Automation.

HelpTextProperty Vea las La propiedad HelpText expone una cadena localizada


notas. que describe el aspecto visual real del control (por
ejemplo, un cuadrado rojo con una "X" blanca) u otra
información sobre herramientas asociada a la
imagen.

Se debe admitir esta propiedad cuando se necesite


una descripción larga para transmitir más
información sobre el control de imagen. Por ejemplo,
un gráfico o diagrama complicado. Esta propiedad se
asigna a la etiqueta LongDesc HTML y la etiqueta
Desc de Scalable Vector Graphics (SVG). Los
desarrolladores que trabajan con controles de
imagen deben admitir una propiedad para permitir la
descripción visual que se establecerá en el control.
Esta propiedad se debe asignar a la propiedad
VisualDescription de automatización de la interfaz de
usuario.

ItemStatusProperty Vea las Si el control de imagen representa la información del


notas. estado sobre un elemento concreto de la pantalla, el
control debe incluirse dentro del elemento. Cuando
la imagen está dentro de un elemento, el elemento
debe admitir la propiedad de estado y generar las
notificaciones adecuadas cuando cambie el estado.

Si una imagen es un control independiente y


transmite el estado, se debe admitir esta propiedad.
Patrones de control de Automatización de la
interfaz de usuario necesarios
La siguiente tabla enumera los patrones de control de UI Automation que deben
soportar todos los controles de image. Para más información sobre los patrones de
control, vea UI Automation Control Patterns Overview.

Patrón de control Soporte Notas


técnico

IGridItemProvider Depende El control de imagen admite el patrón Grid Item si el control


está dentro de un contenedor de cuadrícula.

ITableItemProvider Depende El control de imagen admite el patrón Table Item si el control


está dentro de un contenedor que tiene controles de
encabezado.

IInvokeProvider Nunca Si el control de imagen contiene una imagen en la que se


puede hacer clic, el control debe admitir un tipo de control
que admita el patrón Invoke, como el tipo de control Button.

ISelectionItemProvider Nunca Los controles de imagen no deben admitir el patrón


Selection Item.

Eventos de Automatización de la interfaz de


usuario necesarios
En la tabla siguiente se muestran los eventos de UI Automation que se deben admitir
por parte de todos los controles de image. Para más información sobre los eventos, vea
UI Automation Events Overview.

Evento de Automatización de la interfaz de usuario Soporte técnico Notas

InvokedEvent Nunca None

ElementAddedToSelectionEvent Nunca None

ElementRemovedFromSelectionEvent Nunca None

ElementSelectedEvent Nunca None

Evento cambiado por propiedadBoundingRectangleProperty . Obligatorio None

Evento cambiado por propiedadIsOffscreenProperty . Obligatorio None

Evento cambiado por propiedadIsEnabledProperty . Obligatorio None


Evento de Automatización de la interfaz de usuario Soporte técnico Notas

Evento cambiado por propiedadNameProperty . Obligatorio None

AutomationFocusChangedEvent Obligatorio None

StructureChangedEvent Obligatorio None

Consulte también
Image
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de UI Automation para
el tipo de control List
Artículo • 10/05/2023

7 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 ofrece información sobre la compatibilidad de UI Automation con el


tipo de control List. En UI Automation, un tipo de control es un conjunto de condiciones
que un control debe cumplir para poder usar la propiedad ControlTypeProperty. Las
condiciones incluyen directrices específicas para la estructura de árbol de UI
Automation, los valores de propiedad de UI Automation y los patrones de control.

El tipo de control List ofrece una manera de organizar uno o varios grupos planos de
elementos y permite al usuario seleccionar uno o varios de esos elementos. El tipo de
control List tiene una restricción flexible respecto a los tipos de elementos secundarios
que puede contener. Esto permite que los proveedores de Automatización de la interfaz
de usuario admitan un elemento conocido para los contenedores de selección.

Los requisitos de automatización de la interfaz de usuario de las secciones siguientes se


aplican a todos los controles que implementan el tipo de control List, ya sea Windows
Presentation Foundation (WPF), Win32 o Windows Forms. Los controles de contenedor
de List son un ejemplo de controles que implementan el tipo de control List.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
En la tabla siguiente se describen las dos vistas del árbol de automatización de la
interfaz de usuario que pertenecen a los controles de lista y se describe lo que puede
incluirse en cada vista. La vista de control solo contiene elementos que son controles y
la vista de contenido quita información redundante del árbol. Por ejemplo, un control de
texto utilizado para etiquetar un cuadro combinado se expondrá como el elemento
ComboBox NameProperty . Como ya se expone el control de texto de esta manera a través
de la vista de control, no es necesario que se exponga dos veces; por lo tanto, se quita
de la vista de contenido. Para más información sobre el árbol de automatización de la
interfaz de usuario, vea UI Automation Tree Overview.

Vista de control Vista de contenido

Contiene los elementos Quita la información redundante del árbol para que las tecnologías de
que corresponden a los asistencia trabajen con el conjunto más pequeño de información
controles. significativa para el usuario final.

List List

- DataItem (0 o más) - DataItem (0 o más)


- ListItem (0 o más) - ListItem (0 o más)
- Group (0 o más) - Group (0 o más)
- ScrollBar (0, 1 o 2)

La vista de control de un control que implementa el tipo de control List (por ejemplo, un
control de lista) consta de:

Cero o más elementos dentro del control de lista (los elementos pueden basarse
en los tipos de control de elemento List o Data).

Cero o más controles de grupo dentro de un control de lista.

Cero, uno o dos controles de barra de desplazamiento.

La vista de contenido de un control que implementa el tipo de control List (por ejemplo,
un control de lista) consta de:

Cero o más elementos dentro del control de lista (los elementos pueden basarse
en los tipos de control de elemento List o Data).

Cero o más grupos dentro del control de lista.

Un control de lista no debe disponer de elementos que tengan una relación jerárquica
que no sea estar agrupados. Si los elementos tienen elementos secundarios en el árbol
de automatización de la interfaz de usuario, el contenedor de lista debe basarse en el
tipo de control Tree.

Los elementos seleccionables dentro del control de lista estarán disponibles en los
descendientes del árbol de automatización de la interfaz de usuario del control de lista.
Todos los elementos dentro del control de lista deben pertenecer al mismo grupo de
selección. Los elementos seleccionables de la lista se deben exponer como tipos de
control ListItem (en lugar de DataItem).
Propiedades de Automatización de la interfaz
de usuario necesarias
En la tabla siguiente se muestran las propiedades de Automatización de la interfaz de
usuario cuyo valor o definición es especialmente relevante para los controles de lista.
Para más información sobre las propiedades de automatización de la interfaz de
usuario, vea Propiedades de Automatización de la interfaz de usuario Properties para
clientes.

Propiedad de Valor Notas


automatización de interfaz
de usuario

AutomationIdProperty Vea El valor de esta propiedad debe ser único en todos los
las controles de una aplicación.
notas.

BoundingRectangleProperty Vea El rectángulo exterior que contiene el control completo.


las
notas.

ClickablePointProperty Vea Si el control de lista tiene un punto interactivo (un punto


las en el que puede hacer clic para que la lista reciba el
notas. foco), dicho punto se debe exponer a través de esta
propiedad.

Si el valor de la propiedad IsOffScreen es true, se


generará la excepción NoClickablePointException.

IsKeyboardFocusableProperty Vea Si el control puede recibir el foco del teclado, debe


las admitir esta propiedad.
notas.

NameProperty Vea El valor de propiedad Name de un control de lista debe


las indicar la categoría de opciones de la que se solicita que
notas. el usuario seleccione. Esta propiedad suele recibir su
nombre de una etiqueta de texto estático. Si no hay
ninguna etiqueta de texto estático, el desarrollador de
aplicaciones debe exponer un valor para la propiedad
Name.

La única vez que esta propiedad no es necesaria para los


controles de lista es si el control se utiliza dentro del
subárbol de otro control.

LabeledByProperty Vea Si hay una etiqueta de texto estático, esta propiedad


las debe exponer una referencia a ese control.
notas.
Propiedad de Valor Notas
automatización de interfaz
de usuario

ControlTypeProperty List Este valor es el mismo para todos los marcos de trabajo
de la interfaz de usuario.

LocalizedControlTypeProperty "lista" Cadena localizada que corresponde al tipo de control


List.

IsContentElementProperty True El control de lista siempre se incluye en la vista de


contenido del árbol de Automatización de la interfaz de
usuario.

IsControlElementProperty True El control de lista siempre se incluye en la vista de


control del árbol de Automatización de la interfaz de
usuario.

IsKeyboardFocusableProperty True Si el contenedor puede aceptar la entrada de teclado,


este valor de propiedad debe ser verdadero.

HelpTextProperty Vea El texto de ayuda para los controles de lista debe


las explicar por qué se solicita al usuario que realice una
notas. selección de una lista de opciones. Por ejemplo,
"Seleccione un elemento de esta lista para establecer la
resolución de pantalla del monitor".

Propiedades y patrones de control de


Automatización de la interfaz de usuario
necesarios
En la tabla siguiente se muestran los patrones de control de automatización de la
interfaz de usuario que se deben admitir por los controles de lista. Para más información
sobre los patrones de control, vea UI Automation Control Patterns Overview.

Patrón de Soporte Notas


control/Propiedad técnico/valor
de patrón

ISelectionProvider Obligatorio Todos los controles que admiten el tipo de control List
deben implementar ISelectionProvider cuando se
mantiene el estado de la selección entre los elementos
contenidos en el control. Si los elementos dentro del
contenedor no son seleccionables, debe utilizarse el tipo
de control Group.
Patrón de Soporte Notas
control/Propiedad técnico/valor
de patrón

IsSelectionRequired Depende Los controles List no siempre requieren que se


seleccione un elemento.

CanSelectMultiple Depende Los controles List pueden ser contenedores de selección


única o múltiple.

IScrollProvider Depende Implemente este patrón de control si el desplazamiento


entre los elementos del contenedor es posible.

IGridProvider Depende Implemente este patrón si la navegación en cuadrícula


debe estar disponible de elemento en elemento.

IMultipleViewProvider Depende Implemente este patrón de control si el control puede


admitir varias vistas de los elementos del contenedor.

ITableProvider Nunca ITableProvider nunca se admite para el tipo de control


List. Si el control debe admitir este patrón de control, el
control debe basarse en el tipo de control Data Grid.

Eventos de Automatización de la interfaz de


usuario necesarios
En la tabla siguiente se muestran los eventos de UI Automation que se deben admitir
por parte de todos los controles de lista. Para más información sobre los eventos, vea UI
Automation Events Overview.

Evento de automatización de la interfaz de usuario Soporte Notas


técnico/valor

InvalidatedEvent Depende None

LayoutInvalidatedEvent Depende None

Evento cambiado por propiedadBoundingRectangleProperty . Obligatorio None

Evento cambiado por propiedadIsOffscreenProperty . Obligatorio None

Evento cambiado por propiedadIsEnabledProperty . Obligatorio None

Evento cambiado por propiedadCurrentViewProperty . Depende None

Evento cambiado por propiedadHorizontallyScrollableProperty . Depende None


Evento de automatización de la interfaz de usuario Soporte Notas
técnico/valor

Evento cambiado por Depende None


propiedadHorizontalScrollPercentProperty .

Evento cambiado por propiedadHorizontalViewSizeProperty . Depende None

Evento cambiado por propiedadVerticalScrollPercentProperty . Depende None

Evento cambiado por propiedadVerticallyScrollableProperty . Depende None

Evento cambiado por propiedadVerticalViewSizeProperty . Depende None

AutomationFocusChangedEvent Obligatorio None

StructureChangedEvent Obligatorio None

Consulte también
List
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de UI Automation para
el tipo de control ListItem
Artículo • 09/05/2023

7 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 ofrece información sobre la compatibilidad de UI Automation con el


tipo de control ListItem. En Automatización de la interfaz de usuario, un tipo de control
es un conjunto de condiciones que un control debe cumplir para poder usar la
propiedad ControlTypeProperty. Las condiciones incluyen directrices específicas para la
estructura de árbol de Automatización de la interfaz de usuario, los valores de
propiedad de Automatización de la interfaz de usuario y los patrones de control.

Los controles de elemento de lista son un ejemplo de controles que implementan el


tipo de control ListItem.

En las secciones siguientes se definen la estructura de árbol, las propiedades, los


patrones de control y los eventos para el tipo de control ListItem de Automatización de
la interfaz de usuario necesarios. Los requisitos de Automatización de la interfaz de
usuario se aplican a todos los controles de lista, ya sea Windows Presentation
Foundation (WPF), Win32 o Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
En la tabla siguiente se describe la vista de control y la vista de contenido del árbol de
Automatización de la interfaz de usuario que pertenece a los controles de elemento de
lista y se describe lo que puede incluirse en cada vista. Para más información sobre el
árbol de Automatización de la interfaz de usuario, consulte Introducción al árbol de
Automatización de la interfaz de usuario.

Vista de control Vista de contenido


Vista de control Vista de contenido

ListItem ListItem

- Image (0 o más)
- Texto (0 o más)
-Edición (0 o más)

Los elementos secundarios de un control de elemento de lista en la vista de contenido


del árbol de Automatización de la interfaz de usuario siempre deben ser "0". Si la
estructura del control es tal que contiene otros elementos debajo del elemento de lista,
debería cumplir los requisitos para el tipo de control Compatibilidad de Automatización
de la interfaz de usuario para el tipo de control TreeItem.

Propiedades de Automatización de la interfaz


de usuario necesarias
En la tabla siguiente se muestran las propiedades de Automatización de la interfaz de
usuario cuyo valor o definición es especialmente relevante para los controles de
elemento de lista. Para más información sobre las propiedades de Automatización de la
interfaz de usuario, consulte Propiedades de Automatización de la interfaz de usuario:
Propiedades para clientes.

Propiedad de Valor Notas


automatización de interfaz
de usuario

AutomationIdProperty Vea las El valor de esta propiedad debe ser único en todos
notas. los controles de una aplicación.

BoundingRectangleProperty Vea las El valor de esta propiedad debe incluir el área del
notas. contenido de imagen y texto del elemento de lista.

ClickablePointProperty Depende Si el control de lista tiene un punto interactivo (un


punto en el que puede hacer clic para que la lista
reciba el enfoque), ese punto se debe exponer a
través de esta propiedad. Si los elementos de lista
descendientes abarcan completamente el control de
lista, este generará una NoClickablePointException
para indicar que el cliente debe solicitar un
elemento dentro del control de lista para un punto
donde hacer clic.
Propiedad de Valor Notas
automatización de interfaz
de usuario

NameProperty Vea las El valor de la propiedad del nombre de un control


notas. de elemento de lista procede del contenido del
texto del elemento.

LabeledByProperty Vea las Si hay una etiqueta de texto estático, esta propiedad
notas. debe exponer una referencia a ese control.

ControlTypeProperty ListItem Este valor es el mismo para todos los marcos de


trabajo de la interfaz de usuario.

LocalizedControlTypeProperty "elemento Cadena localizada que corresponde al tipo de


de lista" control ListItem.

IsContentElementProperty True El control de lista siempre se incluye en la vista de


contenido del árbol de Automatización de la interfaz
de usuario.

IsControlElementProperty True El control de lista siempre se incluye en la vista de


control del árbol de Automatización de la interfaz
de usuario.

IsKeyboardFocusableProperty True Si el contenedor puede aceptar la entrada de


teclado, este valor de propiedad debe ser
verdadero.

HelpTextProperty "" El texto de ayuda para los controles de lista debe


explicar por qué se le solicita al usuario que elija una
opción en una lista de opciones, que es
normalmente el mismo tipo de información
presentada a través de una información sobre
herramientas. Por ejemplo, "Seleccione un elemento
para establecer la resolución de pantalla del
monitor".

ItemTypeProperty Depende Esta propiedad se debe exponer para los controles


de elemento de lista que representan un objeto
subyacente. Estos controles de elemento de lista
suelen tener un icono asociado al control que los
usuarios se asocian con el objeto subyacente.

IsOffscreenProperty Depende Esta propiedad debe devolver un valor para si el


elemento de lista se desplaza actualmente en la
vista dentro del contenedor primario que
implementa el patrón de control Scroll.
Patrones de control de Automatización de la
interfaz de usuario necesarios
En la tabla siguiente se muestran los patrones de control de Automatización de la
interfaz de usuario que se deben admitir por los controles de elemento de lista. Para
más información sobre los patrones de control, vea UI Automation Control Patterns
Overview.

Patrón de control Soporte Notas


técnico

ISelectionItemProvider Sí El control de elemento de lista debe implementar este


patrón de control. Esto permite que los controles de
elementos de lista transmitan cuando se seleccionan.

IScrollItemProvider Depende Si el elemento de lista se incluye dentro de un contenedor


que se puede desplazar, se debe implementar este patrón
de control.

IToggleProvider Depende Si el elemento de lista se puede activar y la acción no


realiza un cambio de estado de la selección, se debe
implementar este patrón de control.

IExpandCollapseProvider Depende Si el elemento se puede manipular para mostrar u ocultar


información, se debe implementar este patrón de control.

IValueProvider Depende Si se puede editar el elemento, se debe implementar este


patrón de control. Los cambios realizados al control de
elemento de lista provocarán cambios en los valores de
NamePropertyy Value.

IGridItemProvider Depende Si se admite la navegación espacial de un elemento a otro


dentro del contenedor de lista y el contenedor está
organizado en filas y columnas, se debe implementar el
patrón de control de elemento de cuadrícula.

IInvokeProvider Depende Si el elemento tiene un comando que se puede ejecutar en


él, independiente de la selección, se debe implementar
este patrón. Se trata normalmente de una acción asociada
a hacer doble clic en el control de elemento de lista.
Algunos ejemplos serían iniciar un documento desde el
Explorador de Microsoft Windows o reproducir un archivo
de música en Media Player de Microsoft Windows.

Eventos de Automatización de la interfaz de


usuario necesarios
En la siguiente tabla se muestra los eventos de Automatización de la interfaz de usuario
requeridos para ser admitidos por todos los controles de elemento de lista. Para más
información sobre los eventos, vea UI Automation Events Overview.

Evento de Automatización de la interfaz de usuario Soporte técnico Notas

InvokedEvent Depende None

ElementAddedToSelectionEvent Obligatorio None

ElementRemovedFromSelectionEvent Obligatorio None

ElementSelectedEvent Obligatorio None

Evento cambiado por propiedadBoundingRectangleProperty . Obligatorio None

Evento cambiado por propiedadIsOffscreenProperty . Obligatorio None

Evento cambiado por propiedadIsEnabledProperty . Obligatorio None

NameProperty Obligatorio None

Evento cambiado por propiedadItemStatusProperty . Depende None

Evento cambiado por propiedadExpandCollapseStateProperty . Depende None

Evento cambiado por propiedadValueProperty . Depende None

Evento cambiado por propiedadToggleStateProperty . Depende None

AutomationFocusChangedEvent Obligatorio None

StructureChangedEvent Obligatorio None

Consulte también
ListItem
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de UI Automation para
el tipo de control Menu
Artículo • 09/05/2023

7 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 ofrece información sobre la compatibilidad de automatización de la


interfaz de usuario de Microsoft con el tipo de control menú. Describe la estructura de
árbol de Microsoft UI Automation de control y ofrece las propiedades y los patrones de
control para escenarios de control concretos.

Un control de menú permite organizar jerárquicamente los elementos asociados a


comandos y controladores de eventos. En una aplicación típica de Microsoft Windows,
una barra de menú contiene varios botones de menú (como Archivo, Edición y
Ventana), y cada botón de menú muestra un menú. Un menú contiene una colección de
elementos de menú (como Nuevo, Abriry Cerrar), que se puede expandir para mostrar
elementos de menú adicionales o realizar una acción específica cuando se haga clic en
ellos.

En las secciones siguientes se definen la estructura de árbol, las propiedades, los


patrones de control y los eventos para el tipo de control menú de UI Automation
necesarios. Los requisitos de Automatización de la interfaz de usuario se aplican a todos
los controles de lista, ya sea Windows Presentation Foundation (WPF), Win32 o
Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
En la tabla siguiente se describe la vista de control y la vista de contenido del árbol de
automatización de la interfaz de usuario que pertenece a los controles de menú y se
describe lo que puede incluirse en cada vista. Para más información sobre el árbol de
automatización de la interfaz de usuario, consulte Introducción al árbol de
automatización de la interfaz de usuario.

Vista de Vista de contenido


control

Menú No aplicable (a menos que el control de menú sea un menú contextual que sea un
elemento primario de un objeto que no sea un elemento de menú)
- MenuItem
(1 o varios) - MenuItem (1 o varios)

Los controles de menú siempre aparecen en las vistas de control y contenido del árbol
de UI Automation. Los tipos de control de menú deben aparecer en el control al que
hace referencia su información. Los clientes de Automatización de la interfaz de usuario
deben estar a la escucha de MenuOpenedEvent para asegurarse de que obtienen de forma
coherente la información que transmiten los controles de menú. Los controles de menú
contextual son un caso especial. Aparecen como elementos secundarios del escritorio.

Propiedades de Automatización de la interfaz


de usuario necesarias
La siguiente tabla enumera las propiedades de UI Automation cuyo valor o definición es
especialmente relevante para el tipo de control de menú. Para más información sobre
las propiedades de UI Automation, consulte Propiedades de UI Automation:
Propiedades para clientes.

Propiedad de Valor Notas


automatización de
interfaz de usuario

NameProperty No El control de menú no requiere que se establezca una


compatible propiedad Name.

LabeledByProperty Null No se espera ninguna etiqueta con un control de


menú típico.

ControlTypeProperty Menú Este valor es el mismo para todos los marcos de


trabajo de la interfaz de usuario.

IsContentElementProperty False El control de menú no se incluye en la vista de


contenido del árbol de la automatización de la
interfaz de usuario.

IsControlElementProperty True El control de menú siempre se incluye en la vista de


control del árbol de UI Automation.
Patrones de control de Automatización de la
interfaz de usuario necesarios
No hay ningún patrón de control necesario para el tipo de control Menu.

Eventos de Automatización de la interfaz de


usuario necesarios
Los controles de menú deben generar el evento MenuOpenedEvent cuando aparecen en la
pantalla. El evento MenuOpenedEvent incluirá el texto del control. El evento
MenuClosedEvent debe generarse cuando un menú desaparece de la pantalla.

En la siguiente tabla se muestra los eventos de automatización de la interfaz de usuario


que se deben admitir por todos los controles de menú. Para más información sobre los
eventos, vea UI Automation Events Overview.

Evento de automatización de la interfaz de usuario Soporte técnico/valor Notas

MenuOpenedEvent Obligatorio None

MenuClosedEvent Obligatorio None

Evento cambiado por propiedadBoundingRectangleProperty . Obligatorio None

Evento cambiado por propiedadIsOffscreenProperty . Obligatorio None

Evento cambiado por propiedadIsEnabledProperty . Obligatorio None

AutomationFocusChangedEvent Obligatorio None

StructureChangedEvent Obligatorio None

Consulte también
Menu
Información general acerca de los patrones de control de UI Automation
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de UI Automation para
el tipo de control MenuBar
Artículo • 10/05/2023

7 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 ofrece información sobre la compatibilidad de UI Automation con el


tipo de control MenuBar. En Automatización de la interfaz de usuario, un tipo de control
es un conjunto de condiciones que un control debe cumplir para poder usar la
propiedad ControlTypeProperty. Las condiciones incluyen directrices específicas para la
estructura de árbol de UI Automation , los valores de propiedad de esta y los patrones
de control.

Los controles de contenedor de barra de menús son un ejemplo de controles que


implementan el tipo de control MenuBar. Las barras de menús proporcionan un medio
para que los usuarios activen los comandos y las opciones contenidos en una aplicación.

En las secciones siguientes se definen la estructura de árbol, las propiedades, los


patrones de control y los eventos para el tipo de control MenuBar de UI Automation
necesarios. Los requisitos de Automatización de la interfaz de usuario se aplican a todos
los controles de lista, ya sea Windows Presentation Foundation (WPF), Win32 o
Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
En la tabla siguiente se describe la vista de control y la vista de contenido del árbol de
automatización de la interfaz de usuario que pertenece a los controles de barra de
menú y se describe lo que puede incluirse en cada vista. Para más información sobre el
árbol de automatización de la interfaz de usuario, consulte Introducción al árbol de
automatización de la interfaz de usuario.
Vista de control Vista de contenido

MenuBar MenuBar

- MenuItem (1 o más) - MenuItem (1 o más)


- Otros controles (0 o varios) - Otros controles (0 o varios)

Los controles de barra de menús pueden contener otros controles como controles de
edición y cuadros combinados dentro de su estructura. Estos controles adicionales
corresponden a la categoría "otros controles" que se indica anteriormente en las vistas
de control y de contenido.

Propiedades de Automatización de la interfaz


de usuario necesarias
La siguiente tabla enumera las propiedades de UI Automation cuyo valor o definición es
especialmente relevante para el tipo de control de menú. Para más información sobre
las propiedades de automatización de la interfaz de usuario, consulte Propiedades de
automatización de la interfaz de usuario: Propiedades para clientes.

Propiedad de Valor Notas


automatización de interfaz
de usuario

BoundingRectangleProperty Vea las El valor que expone esta propiedad debe incluir
notas. todos los controles que se contienen dentro de ella.

NameProperty Vea las El control de barra de menús no necesita un nombre


notas. a menos que una aplicación tenga más de una barra
de menús. Si hay más de una barra de menús en una
aplicación, esta propiedad debe utilizarse para
exponer los nombres distintivos, como "Formatting"
o "Outlining".

LabeledByProperty Null Los controles de barra de menús nunca tienen una


etiqueta.

ControlTypeProperty MenuBar Este valor es el mismo para todos los marcos de


trabajo de la interfaz de usuario.

LocalizedControlTypeProperty "barra Cadena localizada que corresponde al tipo de control


de MenuBar.
menús"
Propiedad de Valor Notas
automatización de interfaz
de usuario

IsContentElementProperty True El control de menú siempre se incluye en la vista de


contenido del árbol de automatización de la interfaz
de usuario.

IsControlElementProperty True La barra de control de menú siempre se incluye en la


vista de control del árbol de UI Automation.

IsOffscreenProperty Vea las El valor de esta propiedad depende de si el control es


notas. visible en la pantalla.

OrientationProperty Depende Esta propiedad expone si el control de barra de


menús es horizontal o vertical.

IsKeyboardFocusableProperty True Los controles de barra de menús pueden recibir el


foco del teclado porque los controles que contienen
pueden recibir el foco de teclado.

HelpTextProperty Vea las No hay escenarios en los que sea necesario texto de
notas. ayuda para un control de barra de menús.

AcceleratorKeyProperty Null Las barras de menús nunca tienen teclas de


aceleración.

AccessKeyProperty "Alt" Al presionar la tecla Alt, el foco siempre debe pasar a


la barra de menús de dentro de la aplicación.

Patrones de control de Automatización de la


interfaz de usuario necesarios
En la tabla siguiente se muestran los patrones de control de Automatización de la
interfaz de usuario requeridos para ser admitidos por los controles de la barra de menú.
Para más información sobre los patrones de control, vea UI Automation Control Patterns
Overview.

Patrón de control Soporte Notas


técnico

IExpandCollapseProvider Depende Si el control se puede expandir o contraer, implemente


IExpandCollapseProvider.

IDockProvider Depende Si el control se puede acoplar a diferentes partes de la


pantalla, implemente IDockProvider.
Patrón de control Soporte Notas
técnico

ITransformProvider Depende Si el control puede cambiar de tamaño, girarse o moverse,


debe implementar ITransformProvider.

Eventos de Automatización de la interfaz de


usuario necesarios
En la siguiente tabla se muestra los eventos de automatización de la interfaz de usuario
que se deben admitir por todos los controles de barra menú. Para más información
sobre los eventos, vea UI Automation Events Overview.

Evento de automatización de la interfaz de usuario Soporte técnico/valor Notas

Evento cambiado por propiedadBoundingRectangleProperty . Obligatorio None

Evento cambiado por propiedadIsOffscreenProperty . Obligatorio None

Evento cambiado por propiedadIsEnabledProperty . Obligatorio None

Evento cambiado por propiedadExpandCollapseStateProperty . Depende None

AutomationFocusChangedEvent Obligatorio None

StructureChangedEvent Obligatorio None

Consulte también
MenuBar
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de UI Automation para
el tipo de control MenuItem
Artículo • 10/05/2023

7 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 ofrece información sobre la compatibilidad de automatización de la


interfaz de usuario de Microsoft con el tipo de control MenuItem. Describe la estructura
de árbol de automatización de la interfaz de usuario de Microsoft del control y ofrece
las propiedades y los patrones de control que son necesarios para el tipo de control
MenuItem.

Un control de menú permite organizar jerárquicamente los elementos asociados a


comandos y controladores de eventos. En una aplicación de Microsoft Windows típica,
una barra de menús contiene varios elementos de menú (como Archivo, Editary
Ventana) y cada elemento de menú muestra un menú. Un menú contiene una colección
de elementos de menú (como Nuevo, Abiertoy Cerrar), que se puede expandir para
mostrar elementos de menú adicionales o realizar una acción específica cuando se haga
clic en ella. Un elemento de menú se pueden hospedar en un menú, barra de menús o
barra de herramientas.

En las secciones siguientes se definen la estructura de árbol de automatización de la


interfaz de usuario necesaria, las propiedades, los patrones de control y los eventos para
el tipo de control MenuItem. Los requisitos de automatización de la interfaz de usuario
se aplican a todos los controles de lista, ya sea Windows Presentation Foundation (WPF),
Win32 o Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
En la tabla siguiente se describe la vista de control y la vista de contenido del árbol de
automatización de la interfaz de usuario que pertenece a los controles de elemento de
menú y se describe lo que puede incluirse en cada vista. Para más información sobre el
árbol de automatización de la interfaz de usuario, vea UI Automation Tree Overview.

Vista de control Vista de contenido

MenuItem "Ayuda" MenuItem "Ayuda"

- MenuItem "Temas de Ayuda"


Menú (submenú de elemento de menú de Ayuda) - MenuItem "Acerca del Bloc de notas"

MenuItem "Temas de Ayuda"


MenuItem "Acerca del Bloc de notas"

La vista de control del control de elemento de menú tiene la estructura de árbol de


automatización de la interfaz de usuario mostrada arriba. Tenga en cuenta que se
incluye el elemento de menú Ayuda para ilustrar mejor la estructura en una jerarquía
típica de menú a submenú.

Para la vista de contenido, el menú no aparece en el árbol de automatización de la


interfaz de usuario porque no transmite información significativa al usuario final.

Propiedades de Automatización de la interfaz


de usuario necesarias
En la tabla siguiente se muestran las propiedades de automatización de la interfaz de
usuario cuyo valor o definición es especialmente relevante para los controles de
elemento de menú. Para más información sobre las propiedades de automatización de
la interfaz de usuario, vea UI Automation Properties for Clients.

Propiedad Valor Descripción

AutomationIdProperty Vea las El valor de esta propiedad debe ser único en todos
notas. los controles de una aplicación.

BoundingRectangleProperty Vea las El rectángulo exterior que contiene el control


notas. completo.

ClickablePointProperty Vea las Se admite si hay un rectángulo delimitador. Si no


notas. todos los puntos que se encuentran dentro del
rectángulo delimitador son seleccionables, y realiza
pruebas de aciertos especializadas, invalide y
ofrezca un punto en el que hacer clic.

IsKeyboardFocusableProperty Vea las Si el control puede recibir el foco del teclado, debe
notas. admitir esta propiedad.
Propiedad Valor Descripción

NameProperty Vea las El control de elemento de menú se incluye en la


notas. vista de contenido del árbol de automatización de la
interfaz de usuario y tiene como etiqueta propia un
nombre.

LabeledByProperty Null Sin etiqueta.

ControlTypeProperty MenuItem Este valor es el mismo para todos los marcos de


trabajo de la interfaz de usuario.

LocalizedControlTypeProperty "elemento Cadena localizada que corresponde al tipo de


de menú" control MenuItem.

IsContentElementProperty True El control de elemento de menú nunca se incluye en


la vista de contenido del árbol de automatización de
la interfaz de usuario.

IsControlElementProperty True El control de elemento de menú se debe incluir


siempre en la vista de control del árbol de
Automatización de interfaz de usuario.

Patrones de control de Automatización de la


interfaz de usuario necesarios
En la tabla siguiente se muestran los patrones de control de automatización de la
interfaz de usuario que se deben admitir por los controles de elemento de menú. Para
más información sobre los patrones de control, vea UI Automation Control Patterns
Overview.

Propiedad de patrón Soporte Notas


de control técnico

IExpandCollapseProvider Depende Si el control se puede expandir o contraer, implemente


IExpandCollapseProvider.

IInvokeProvider Depende Si el control ejecuta un acción o comando único,


implemente IInvokeProvider.

IToggleProvider Depende Si el control representa una opción que se puede activar o


desactivar, implemente IToggleProvider.

ISelectionItemProvider Depende Si el control se usa para seleccionar de una lista de


opciones entre los elementos de menú, implemente
ISelectionItemProvider.
Eventos de automatización de la interfaz de
usuario para elemento de menú
En la tabla siguiente se muestran los eventos de automatización de la interfaz de
usuario de Microsoft asociados al control de elemento de menú.

Evento Soporte Explicación


técnico

InvokedEvent Depende Se debe generar si el control admite el


patrón de control Invoke.

Evento cambiado por Depende Se debe generar si el control admite el


propiedadToggleStateProperty . patrón de control Toggle.

Evento cambiado por Depende Se debe generar si el control admite el


propiedadExpandCollapseStateProperty patrón de control Expand Collapse.
.

ElementSelectedEvent Depende Ninguno.

Eventos de Automatización de la interfaz de


usuario necesarios
En la siguiente tabla se muestra los eventos de automatización de la interfaz de usuario
que se deben admitir por todos los controles de elemento de menú. Para más
información sobre los eventos, vea UI Automation Events Overview.

Evento de automatización de la interfaz de usuario Soporte técnico/valor Notas

InvokedEvent Depende None

ElementAddedToSelectionEvent Depende None

ElementRemovedFromSelectionEvent Depende None

ElementSelectedEvent Depende None

Evento cambiado por propiedadBoundingRectangleProperty . Obligatorio None

Evento cambiado por propiedadIsOffscreenProperty . Obligatorio None

Evento cambiado por propiedadIsEnabledProperty . Obligatorio None

Evento cambiado por propiedadExpandCollapseStateProperty . Depende None


Evento de automatización de la interfaz de usuario Soporte técnico/valor Notas

Evento cambiado por propiedadToggleStateProperty . Depende None

AutomationFocusChangedEvent Obligatorio None

StructureChangedEvent Obligatorio None

Problemas heredados
Solo se admitirá Toggle Pattern cuando se compruebe el elemento de menú de Win32 y
se pueda determinar mediante programación que es necesario admitir Toggle Pattern.
Dado que el elemento de menú de Win32 no expone si tiene la capacidad de
comprobarse, se admitirá Invoke Pattern cuando el elemento de menú no esté activado.
Se realizará una excepción para admitir siempre Invoke Pattern incluso para elementos
de menú que solo deberían admitir Toggle Pattern. Esto es para que los clientes no se
confundan en que un elemento que admitía Invoke Pattern (cuando el elemento de
menú estaba desactivado) ya no admite el patrón cuando se activa.

Consulte también
MenuItem
Información general acerca de los patrones de control de UI Automation
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de UI Automation para
el tipo de control Pane
Artículo • 11/04/2023

7 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.

Este tema proporciona información sobre la compatibilidad de Automatización de la


interfaz de usuario con el tipo de control Pane. En Automatización de la interfaz de
usuario, un tipo de control es un conjunto de condiciones que un control debe cumplir
para poder usar la propiedad ControlTypeProperty. Las condiciones incluyen directrices
específicas para la estructura de árbol de Automatización de la interfaz de usuario, los
valores de propiedad de Automatización de la interfaz de usuario y los patrones de
control.

El tipo de control Pane se usa para representar un objeto dentro de una ventana de
documento o marco. Los usuarios pueden navegar entre controles de panel y dentro del
contenido del panel actual, pero no pueden navegar entre elementos de paneles
diferentes. Por tanto, los controles del panel representan un nivel de agrupación inferior
a ventanas o documentos, pero superior a los controles individuales. El usuario navega
entre paneles presionando TAB, F6 o CTRL+TAB, dependiendo del contexto. No se
requiere ninguna navegación mediante teclado específica por el tipo de control Pane.

En las secciones siguientes se definen la estructura de árbol, las propiedades, los


patrones de control y los eventos para el tipo de control Pane de Automatización de la
interfaz de usuario necesarios. Los requisitos de Automatización de la interfaz de
usuario se aplican a todos los controles de lista, ya sea Windows Presentation
Foundation (WPF), Win32 o Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
En la tabla siguiente se describe la vista de control y la vista de contenido del árbol de
Automatización de la interfaz de usuario que pertenece a los controles de panel y se
describe lo que puede incluirse en cada vista. Para más información sobre el árbol de
Automatización de la interfaz de usuario, vea Información general del árbol de
Automatización de la interfaz de usuario.

Vista de control Vista de contenido

Panel Panel

Propiedades de Automatización de la interfaz


de usuario necesarias
En la tabla siguiente se muestran las propiedades de Automatización de la interfaz de
usuario cuyo valor o definición es especialmente relevante para los controles de panel.
Para más información sobre las propiedades de automatización de la interfaz de
usuario, vea Propiedades de Automatización de la interfaz de usuario Properties para
clientes.

Propiedad de Valor Notas


automatización de interfaz
de usuario

AutomationIdProperty Vea las El valor de esta propiedad debe ser único en todos los
notas. controles de una aplicación.

BoundingRectangleProperty Vea las El rectángulo exterior que contiene el control completo.


notas.

IsKeyboardFocusableProperty Vea las Si el control puede recibir el foco del teclado, debe
notas. admitir esta propiedad.

NameProperty Vea las El valor de esta propiedad siempre debe ser un título
notas. claro, conciso y significativo.

ClickablePointProperty Vea las Esta propiedad expone un punto en el que se puede


notas. hacer clic del control de panel que hace que el enfoque
se sitúe en el panel cuando se hace clic en él.

LabeledByProperty Vea las Los controles de panel normalmente no tienen una


notas. etiqueta estática. Si hay una etiqueta de texto estático,
se debe exponer a través de esta propiedad.

ControlTypeProperty Panel Este valor es el mismo para todos los marcos de trabajo
de la interfaz de usuario.
Propiedad de Valor Notas
automatización de interfaz
de usuario

LocalizedControlTypeProperty "panel" Cadena localizada que corresponde al tipo de control


Pane.

IsContentElementProperty True Los controles de panel siempre se incluyen en la vista


de contenido del árbol de Automatización de la interfaz
de usuario.

IsControlElementProperty True Los controles de panel siempre se incluyen en la vista


de control del árbol de Automatización de la interfaz
de usuario.

HelpTextProperty "" El texto de ayuda para controles de panel debería


explicar cuál es el propósito del marco y cómo se
relaciona con otros marcos. Se necesita una descripción
si la finalidad y la relación de los marcos no está clara a
partir del valor de la NameProperty . "

AccessKeyProperty Vea las Si una combinación de teclas específica coloca el


notas. enfoque en el panel, dicha información debería
exponerse a través de esta propiedad.

Patrones de control de Automatización de la


interfaz de usuario necesarios
En la siguiente tabla se enumeran los patrones de control de Automatización de la
interfaz de usuario que deben admitir todos los controles de panel. Para más
información sobre los patrones de control, vea UI Automation Control Patterns
Overview.

Patrón de control Soporte Notas


técnico

ITransformProvider Depende Implemente este patrón de control si el control de panel se


puede mover, cambiar de tamaño o girar en la pantalla.

IWindowProvider Nunca Si necesita implementar este patrón de control, el control debe


basarse en el tipo de control Window .

IDockProvider Depende Implemente este patrón de control si se puede acoplar el control


de panel.

IScrollProvider Depende Implemente este patrón de control si se puede desplazar el


control de panel.
Eventos de Automatización de la interfaz de
usuario necesarios
En la tabla siguiente se muestran los eventos de Automatización de la interfaz de
usuario que deben admitir todos los controles de panel. Para más información sobre los
eventos, vea UI Automation Events Overview.

Evento de automatización de la interfaz de usuario Soporte Notas


técnico/valor

WindowClosedEvent Nunca None

WindowOpenedEvent Nunca None

AsyncContentLoadedEvent Obligatorio None

Evento cambiado por propiedadBoundingRectangleProperty . Obligatorio None

Evento cambiado por propiedadIsOffscreenProperty . Obligatorio None

Evento cambiado por propiedadIsEnabledProperty . Obligatorio None

Evento cambiado por propiedadHorizontallyScrollableProperty . Depende None

Evento cambiado por Depende None


propiedadHorizontalScrollPercentProperty .

Evento cambiado por propiedadHorizontalViewSizeProperty . Depende None

Evento cambiado por propiedadVerticalScrollPercentProperty . Depende None

Evento cambiado por propiedadVerticallyScrollableProperty . Depende None

Evento cambiado por propiedadVerticalViewSizeProperty . Depende None

Evento cambiado por propiedadWindowVisualStateProperty . Nunca None

AutomationFocusChangedEvent Obligatorio None

StructureChangedEvent Obligatorio None

Ejemplo de tipo de control de panel


En la imagen siguiente se muestra un control que implementa el tipo de control Pane.
Árbol de Automatización de la interfaz de Árbol de Automatización de la interfaz de
usuario: vista de control usuario: vista de contenido

Panel - Pane
Tree (patrón de desplazamiento) - Tree (patrón de desplazamiento)
- TreeItem
TreeItem - …Pane
Panel - Edit
Edit (patrón de desplazamiento) - (patrón de desplazamiento)

Consulte también
Pane
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de UI Automation para
el tipo de control ProgressBar
Artículo • 10/05/2023

7 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 ofrece información sobre la compatibilidad de la automatización de la


interfaz de usuario con el tipo de control ProgressBar. En UI Automation, un tipo de
control es un conjunto de condiciones que un control debe cumplir para poder usar la
propiedad ControlTypeProperty. Las condiciones incluyen directrices específicas para la
estructura de árbol de Automatización de la interfaz de usuario, los valores de
propiedad de Automatización de la interfaz de usuario, los patrones de control y los
eventos de automatización de la interfaz de usuario.

Los controles de barra de progreso son un ejemplo de controles que implementan el


tipo de control ProgressBar. Los controles de barra de progreso se utilizan para indicar
el progreso de una operación larga. El control está compuesto de un rectángulo que se
rellena gradualmente con el color de resaltado del sistema a medida que una operación
progresa.

En las secciones siguientes se definen la estructura de árbol de Automatización de la


interfaz de usuario, las propiedades, los patrones de control y los eventos necesarios
para el tipo de control ProgressBar. Los requisitos de Automatización de la interfaz de
usuario se aplican a todos los controles de lista, ya sea Windows Presentation
Foundation (WPF), Win32 o Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
En la tabla siguiente se describe la vista de control y la vista de contenido del árbol de
Automatización de la interfaz de usuario que pertenece a los controles de barra de
progreso y se describe lo que puede incluirse en cada vista. Para más información sobre
el árbol de automatización de la interfaz de usuario, consulte Introducción al árbol de
automatización de la interfaz de usuario.

Vista de control Vista de contenido

ProgressBar ProgressBar

Los controles de barra de progreso no tienen elementos secundarios en la vistas de


control o de contenido del árbol de UI Automation.

Propiedades de Automatización de la interfaz


de usuario necesarias
En la tabla siguiente se muestran las propiedades de automatización de la interfaz de
usuario cuyo valor o definición es especialmente importante para los controles de la
barra de progreso. Para más información sobre las propiedades de UI Automation,
consulte Propiedades de UI Automation: Propiedades para clientes.

Propiedad de Valor Notas


automatización de interfaz
de usuario

AutomationIdProperty Vea las El valor de esta propiedad debe ser único en todos
notas. los controles de una aplicación.

BoundingRectangleProperty Vea las El rectángulo exterior que contiene el control


notas. completo.

ClickablePointProperty Vea las Se admite si hay un rectángulo delimitador. Si no


notas. todos los puntos que se encuentran dentro del
rectángulo delimitador son seleccionables, y
realiza pruebas de aciertos especializadas, invalide
y ofrezca un punto en el que hacer clic.

IsKeyboardFocusableProperty Vea las Si el control puede recibir el foco del teclado, debe
notas. admitir esta propiedad.

NameProperty Vea las El control de barra de progreso suele recibir su


notas. nombre de una etiqueta de texto estático. Si no
hay ninguna etiqueta de texto estático, el
desarrollador de aplicaciones debe exponer un
valor para la propiedad Name .

LabeledByProperty Vea las Si hay una etiqueta de texto estático, esta


notas. propiedad debe exponer una referencia a ese
control.
Propiedad de Valor Notas
automatización de interfaz
de usuario

ControlTypeProperty ProgressBar Este valor es el mismo para todos los marcos de


trabajo de la interfaz de usuario.

LocalizedControlTypeProperty "barra de Cadena localizada que corresponde al tipo de


progreso" control ProgressBar.

IsContentElementProperty True El control de la barra de progreso siempre se


incluye en la vista de contenido del árbol de UI
Automation.

IsControlElementProperty True El control de la barra de progreso siempre se


incluye en la vista de control del árbol de UI
Automation.

Propiedades y patrones de control de


Automatización de la interfaz de usuario
necesarios
En la tabla siguiente se muestran los patrones de control de automatización de la
interfaz de usuario necesarios para que todos los controles de barra de progreso los
admitan. Para más información sobre los patrones de control, vea UI Automation
Control Patterns Overview.

Patrón de Soporte Notas


control/Propiedad técnico/valor
de patrón

IValueProvider Depende Los controles de barra de progreso que ofrecen una


indicación textual del progreso deben implementar
IValueProvider.

IsReadOnly True El valor de esta propiedad siempre es True.

Value Vea las notas. Esta propiedad expone el progreso textual de un control
de barra de progreso.

IRangeValueProvider Depende Los controles de barra de progreso que aceptan un


intervalo numérico deben implementar
IRangeValueProvider

Minimum 0,0 El valor de esta propiedad es el valor más pequeño en


que se puede establecer el control.
Patrón de Soporte Notas
control/Propiedad técnico/valor
de patrón

Maximum 100.0 El valor de esta propiedad es el valor más grande en que


se puede establecer el control.

SmallChange NaN Esta propiedad no es necesaria porque los controles de


barra de progreso son de solo lectura.

LargeChange NaN Esta propiedad no es necesaria porque los controles de


barra de progreso son de solo lectura.

Eventos de Automatización de la interfaz de


usuario necesarios
La siguiente tabla enumera los eventos de UI Automation que necesitan admitir todos
los controles de la barra de progreso. Para más información sobre los eventos, vea UI
Automation Events Overview.

Evento de Automatización de la interfaz de usuario Soporte técnico Notas

Evento cambiado por propiedadBoundingRectangleProperty . Obligatorio None

Evento cambiado por propiedadIsOffscreenProperty . Obligatorio None

Evento cambiado por propiedadIsEnabledProperty . Obligatorio None

Evento cambiado por propiedadNameProperty . Obligatorio None

Evento cambiado por propiedadValueProperty . Depende None

AutomationFocusChangedEvent Obligatorio None

StructureChangedEvent Obligatorio None

Consulte también
ProgressBar
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de UI Automation para
el tipo de control RadioButton
Artículo • 09/05/2023

7 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.

Este tema proporciona información sobre la compatibilidad de UI Automation con el


tipo de control de RadioButton. En UI Automation, un tipo de control es un conjunto de
condiciones que un control debe cumplir para poder usar la propiedad
ControlTypeProperty. Las condiciones incluyen directrices específicas para la estructura
de árbol de UI Automation , los valores de propiedad de esta y los patrones de control.

Un botón de opción consta de un botón redondo y de texto definido por la aplicación


(una etiqueta), un icono o un mapa de bits que indica una opción que el usuario puede
realizar seleccionando el botón. Normalmente, una aplicación usa botones de radio en
un cuadro de grupo para permitir al usuario elegir entre un conjunto de opciones
relacionadas, aunque mutuamente excluyentes. Por ejemplo, la aplicación puede
presentar un grupo de botones de radio desde el que el usuario puede seleccionar una
preferencia de formato para el texto seleccionado en el área del cliente. El usuario
podría seleccionar un formato alineado a la izquierda, alineado a la derecha o centrado
seleccionando el botón de radio correspondiente. Normalmente, el usuario solo puede
seleccionar una opción cada vez a partir de un conjunto de botones de radio.

Las siguientes secciones definen la estructura de árbol de automatización de UI


Automation, las propiedades, los patrones de control y los eventos para el tipo de
control de RadioButton. Los requisitos de Automatización de la interfaz de usuario se
aplican a todos los controles de lista, ya sea Windows Presentation Foundation (WPF),
Win32 o Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
La siguiente tabla muestra la vista de control y la vista de contenido del árbol de UI
Automation que pertenece a los controles de botón de radio y describe lo que puede
contener cada vista. Para más información sobre el árbol de automatización de la
interfaz de usuario, consulte Introducción al árbol de automatización de la interfaz de
usuario.

Vista de control Vista de contenido

RadioButton RadioButton

No hay ningún elemento secundario en la vista de control o la vista de contenido.

Propiedades de Automatización de la interfaz


de usuario necesarias
En la tabla siguiente se muestran las propiedades UI Automation cuyo valor o definición
es especialmente relevante para el tipo de control RadioButton. Para más información
sobre las propiedades de UI Automation, consulte Propiedades de UI Automation:
Propiedades para clientes.

Propiedad de Valor Notas


automatización de interfaz
de usuario

AutomationIdProperty Vea las El valor de esta propiedad debe ser único en


notas. todos los controles de una aplicación.

BoundingRectangleProperty Vea las El rectángulo exterior que contiene el control


notas. completo.

IsKeyboardFocusableProperty Vea las Si el control puede recibir el foco del teclado,


notas. debe admitir esta propiedad.

NameProperty Vea las El nombre del control del botón de radio es el


notas. texto que aparece junto al botón que mantiene el
estado de la selección.

ClickablePointProperty Vea las El punto en el que se puede hacer clic del botón
notas. de radio DEBE ser un punto que establezca la
selección en el botón de opción si se hace clic con
el puntero del mouse.

LabeledByProperty Null Los botones de radio son controles con etiquetas


propias.
Propiedad de Valor Notas
automatización de interfaz
de usuario

ControlTypeProperty RadioButton Este valor es el mismo para todos los marcos de


trabajo de la interfaz de usuario.

LocalizedControlTypeProperty "botón de Cadena localizada que corresponde al tipo de


radio" control RadioButton.

IsContentElementProperty True El control de botón de radio siempre se incluye en


la vista de contenido del árbol de UI Automation.

IsControlElementProperty True El control de botón de radio siempre se incluye en


la vista de control del árbol de UI Automation.

Patrones de control de Automatización de la


interfaz de usuario necesarios
La siguiente tabla enumera los patrones de control de UI Automation que deben
soportar todos los controles de botón de radio. Para más información sobre los
patrones de control, vea UI Automation Control Patterns Overview.

Patrón de Soporte Notas


control/propiedad técnico/valor
de patrón de control

ISelectionItemProvider Sí Todos los controles de botón de radio deben admitir el


patrón Selection Item para permitir que se seleccionen.

SelectionContainer Vea las notas. Siempre debe completarse la


SelectionContainerProperty para que un cliente de la
automatización de la interfaz de usuario pueda
determinar qué otros botones de radio dentro de un
contexto específico están relacionados entre sí. Para la
versión Win32 del botón de radio, no se admitirá esta
propiedad porque no es posible obtener esta
información de ese marco de trabajo heredado.

IToggleProvider Nunca El botón de radio no puede recorrer cíclicamente su


estado una vez que se ha establecido. Este patrón
nunca se debe admitir en el botón de radio.

Eventos de Automatización de la interfaz de


usuario necesarios
La siguiente tabla enumera los eventos de UI Automation que deben ser soportados por
todos los controles de botón de radio. Para más información sobre los eventos, vea UI
Automation Events Overview.

Evento de Automatización de la interfaz de usuario Soporte técnico Notas

ElementRemovedFromSelectionEvent Obligatorio None

ElementSelectedEvent Obligatorio None

Evento cambiado por propiedadToggleStateProperty . Nunca None

Evento cambiado por propiedadBoundingRectangleProperty . Obligatorio None

Evento cambiado por propiedadIsOffscreenProperty . Obligatorio None

Evento cambiado por propiedadIsEnabledProperty . Obligatorio None

AutomationFocusChangedEvent Obligatorio None

StructureChangedEvent Obligatorio None

Consulte también
RadioButton
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de UI Automation para
el tipo de control ScrollBar
Artículo • 09/05/2023

7 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.

Este tema proporciona información sobre la compatibilidad de la UI Automation con el


tipo de control ScrollBar. En UI Automation, un tipo de control es un conjunto de
condiciones que un control debe cumplir para poder usar la propiedad
ControlTypeProperty. Las condiciones incluyen directrices específicas para la estructura
de árbol de UI Automation , los valores de propiedad de esta y los patrones de control.

Los controles de la barra de desplazamiento permiten a un usuario desplazarse por el


contenido dentro de una ventana o contenedor de elementos. El control se compone de
un conjunto de botones y un control thumb.

Las siguientes secciones definen la estructura de árbol de UI Automation, las


propiedades, los patrones de control y los eventos necesarios para el tipo de control
ScrollBar. Los requisitos de Automatización de la interfaz de usuario se aplican a todos
los controles de lista, ya sea Windows Presentation Foundation (WPF), Win32 o
Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
La siguiente tabla muestra la vista de control y la vista de contenido del árbol de UI
Automation que pertenece a los controles de la barra de desplazamiento y describe lo
que puede contener cada vista. Para más información sobre el árbol de automatización
de la interfaz de usuario, consulte Introducción al árbol de automatización de la interfaz
de usuario.

Vista de control Vista de contenido


Vista de control Vista de contenido

ScrollBar No aplicable. El control de barra de desplazamiento no tiene contenido.

- Button (2 o 4)
- Thumb (0 o 1)

El control de barra de desplazamiento siempre tiene de tres a cinco elementos


secundarios. Dado que el subárbol tiene más de un control de botón, debe establecer
un valor AutomationIdProperty específico para cada elemento para que sea
reconocibles para herramientas de automatización de prueba.

Propiedades de Automatización de la interfaz


de usuario necesarias
La siguiente tabla enumera las propiedades de UI Automation cuyo valor o definición es
especialmente relevante para los controles de la barra de desplazamiento. Tenga en
cuenta que un control de barra de desplazamiento tiene contenido; su funcionalidad se
expone mediante el patrón de control Scroll, que se admite en el contenedor que se
desplaza.

Para más información sobre las propiedades de automatización de la interfaz de


usuario, consulte Propiedades de automatización de la interfaz de usuario para clientes.

Propiedad de Valor Notas


automatización de interfaz
de usuario

AutomationIdProperty Vea las notas. El valor de esta propiedad debe ser único en
todos los controles de una aplicación.

BoundingRectangleProperty Vea las notas. El rectángulo exterior que contiene el control


completo.

IsKeyboardFocusableProperty Vea las notas. Si el control puede recibir el foco del teclado,
debe admitir esta propiedad.

NameProperty Null El control de barra de desplazamiento no


tiene elementos de contenido y no es
necesario establecer NameProperty .

ClickablePointProperty No es un El control de barra de desplazamiento no


número. tiene puntos interactivos.

LabeledByProperty Null Las barras de desplazamiento no tienen


etiquetas.
Propiedad de Valor Notas
automatización de interfaz
de usuario

ControlTypeProperty ScrollBar Este valor es el mismo para todos los marcos


de trabajo. Las barras de desplazamiento que
funcionan como controles deslizantes deben
usar el tipo de control Slider.

LocalizedControlTypeProperty "barra de Cadena localizada que se corresponde con el


desplazamiento" tipo de control Button.

IsContentElementProperty False El control de barra de desplazamiento nunca


es un elemento de contenido. Si la barra de
desplazamiento es un control independiente,
debe cumplir el tipo de control Slider y
devolver ControlType.Slider para la
propiedad ControlType .

IsControlElementProperty True La barra de desplazamiento siempre debe ser


un control.

OrientationProperty True El control de barra de desplazamiento


siempre debe exponer su orientación
horizontal o vertical.

Patrones de control de Automatización de la


interfaz de usuario necesarios
La siguiente tabla enumera los patrones de control de UI Automation que deben ser
soportados por los controles de la barra de desplazamiento. Para más información sobre
los patrones de control, vea UI Automation Control Patterns Overview. Tenga en cuenta
que cuando se usa una barra de desplazamiento solo como control para manipulación
de mouse, no admite patrones de control. Si se usa como control deslizante dentro de
una aplicación, se le debe proporcionar el tipo de control Slider.

Patrón de control Soporte Notas


técnico

IScrollProvider Nunca El patrón de control Scroll nunca se admite directamente en la


barra de desplazamiento.

IRangeValueProvider Depende La compatibilidad de esta funcionalidad solo es necesaria si el


patrón de control Scroll no se admite en el contenedor que
tenga la barra de desplazamiento.
Eventos de Automatización de la interfaz de
usuario necesarios
La siguiente tabla enumera los eventos de UI Automation que deben ser soportados por
todos los controles de la barra de desplazamiento. Para más información sobre los
eventos, vea UI Automation Events Overview.

Evento de automatización de la interfaz de usuario Soporte Notas


técnico/valor

Evento cambiado por propiedadBoundingRectangleProperty . Obligatorio None

Evento cambiado por propiedadIsOffscreenProperty . Obligatorio None

Evento cambiado por propiedadIsEnabledProperty . Obligatorio None

Evento cambiado por propiedadHorizontallyScrollableProperty . Nunca None

Evento cambiado por Nunca None


propiedadHorizontalScrollPercentProperty .

Evento cambiado por propiedadHorizontalViewSizeProperty . Nunca None

Evento cambiado por propiedadVerticalScrollPercentProperty . Nunca None

Evento cambiado por propiedadVerticallyScrollableProperty . Nunca None

Evento cambiado por propiedadVerticalViewSizeProperty . Nunca None

Evento cambiado por propiedadValueProperty . Depende None

AutomationFocusChangedEvent Obligatorio None

StructureChangedEvent Obligatorio None

Consulte también
ScrollBar
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de UI Automation para
el tipo de control Separator
Artículo • 10/05/2023

7 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.

Este tema proporciona información sobre la compatibilidad de la UI Automation con el


tipo de control Separator. En UI Automation, un tipo de control es un conjunto de
condiciones que un control debe cumplir para poder usar la propiedad
ControlTypeProperty. Las condiciones incluyen directrices específicas para la estructura
de árbol de Automatización de la interfaz de usuario, los valores de propiedad de
Automatización de la interfaz de usuario y los patrones de control.

Los controles de separador se usan para dividir visualmente un espacio en dos regiones.
Por ejemplo, un control de separador puede ser una barra que defina dos paneles en
una ventana. Si se puede mover el separador, el control debe exponerse como Thumb
en el tipo de control.

En las secciones siguientes se definen la estructura de árbol de Automatización de la


interfaz de usuario, las propiedades, los patrones de control y los eventos necesarios
para el tipo de control de separador. Los requisitos de Automatización de la interfaz de
usuario se aplican a todos los controles de lista, ya sea Windows Presentation
Foundation (WPF), Win32 o Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
La siguiente tabla muestra la vista de control y la vista de contenido del árbol de UI
Automation que pertenece a los controles del separador y describe lo que puede
contener cada vista. Para más información sobre el árbol de automatización de la
interfaz de usuario, consulte Introducción al árbol de automatización de la interfaz de
usuario.
Vista de control Vista de contenido

Separador - El control Separator nunca tiene contenido.

Propiedades de Automatización de la interfaz


de usuario necesarias
La siguiente tabla enumera las propiedades de UI Automation cuyo valor o definición es
especialmente relevante para los controles del separador. Para más información sobre
las propiedades de UI Automation, consulte Propiedades de UI Automation:
Propiedades para clientes.

Propiedad de Valor Notas


automatización de interfaz
de usuario

AutomationIdProperty Vea las El valor de esta propiedad debe ser único en todos
notas los controles de una aplicación.

BoundingRectangleProperty Vea las El rectángulo exterior que contiene el control


notas completo.

ClickablePointProperty Vea las Se admite si hay un rectángulo delimitador. Si no


notas todos los puntos que se encuentran dentro del
rectángulo delimitador son seleccionables, y
realiza pruebas de aciertos especializadas, invalide
y ofrezca un punto en el que hacer clic.

IsKeyboardFocusableProperty Vea las Si el control puede recibir el foco del teclado, debe
notas admitir esta propiedad.

NameProperty "" El control de separador no requiere una


NameProperty.

LabeledByProperty null El control de separador no tiene una etiqueta


estática.

ControlTypeProperty Separador Este valor es el mismo para todos los marcos de


trabajo de la interfaz de usuario.

LocalizedControlTypeProperty "Separador" Cadena localizada que corresponde al tipo de


control Separator.

IsContentElementProperty False El control Separator nunca es contenido.

IsControlElementProperty True El control de separador siempre debe ser un


control.
Patrones de control de Automatización de la
interfaz de usuario necesarios
El control de separador no debe admitir ningún patrón de control.

Eventos de Automatización de la interfaz de


usuario necesarios
La siguiente tabla enumera los eventos de UI Automation que se requiere admitan
todos los controles del separador. Para más información sobre eventos, vea UI
Automation Events Overview.

Evento de Automatización de la interfaz de usuario Soporte técnico Notas

Evento de cambio de propiedadBoundingRectangleProperty . Obligatorio None

Evento de cambio de propiedadIsOffscreenProperty . Obligatorio None

Evento de cambio de propiedadIsEnabledProperty . Obligatorio None

AutomationFocusChangedEvent Obligatorio None

StructureChangedEvent Obligatorio None

Consulte también
Separator
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de la UI Automation
para el tipo de control Slider
Artículo • 10/05/2023

7 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.

Este tema proporciona información sobre la compatibilidad de UI Automation con el


tipo de control Slider. En UI Automation, un tipo de control es un conjunto de
condiciones que un control debe cumplir para poder usar la propiedad
ControlTypeProperty. Las condiciones incluyen directrices específicas para la estructura
de árbol de UI Automation , los valores de propiedad de esta y los tipos de control.

El control Slider es un control compuesto con botones que permiten que un usuario con
un mouse establezca un intervalo numérico o realice una selección de un conjunto de
elementos.

Las siguientes secciones definen la estructura de árbol de automatización de UI


Automation, las propiedades, los patrones de control y los eventos para el tipo de
control deslizante. Los requisitos de UI Automation se aplican a todos los controles
deslizantes de número, ya sea Windows Presentation Foundation (WPF), Win32 o
Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
La siguiente tabla muestra la vista de control y la vista de contenido del árbol de UI
Automation que pertenece a los controles deslizantes y describe lo que puede contener
cada vista. Para más información sobre el árbol de automatización de la interfaz de
usuario, consulte Introducción al árbol de automatización de la interfaz de usuario.

Vista de control Vista de contenido


Vista de control Vista de contenido

Control deslizante Control deslizante

- Button (2 o 4) - Elemento de lista (0 o más)


- Miniatura (solo 1)
- Elemento de lista (0 o más)

Propiedades de Automatización de la interfaz


de usuario necesarias
La siguiente tabla enumera las propiedades de UI Automation cuyo valor o definición es
especialmente relevante para el tipo de control deslizante. Para más información sobre
las propiedades de UI Automation, consulte Propiedades de UI Automation:
Propiedades para clientes.

Propiedad de Valor Notas


automatización de interfaz
de usuario

AutomationIdProperty Vea las El valor de esta propiedad debe ser único en todos
notas. los controles de una aplicación.

BoundingRectangleProperty Vea las El rectángulo exterior que contiene el control


notas. completo.

ClickablePointProperty Vea las La mayoría de los controles deslizantes debe


notas generar la excepción NoClickablePointException
porque todo el rectángulo delimitador del control
deslizante está ocupado por controles secundarios.

IsKeyboardFocusableProperty Vea las Si el control puede recibir el foco del teclado, debe
notas. admitir esta propiedad.

NameProperty Vea las El nombre del control de edición se genera


notas. normalmente desde una etiqueta de texto estático.
Si no hay ninguna etiqueta de texto estático, el
desarrollador de aplicaciones debe asignar un valor
de propiedad para Name . La propiedad Name nunca
debe incluir el contenido textual del control de
edición.

LabeledByProperty Vea las Si hay una etiqueta de texto estático asociada al


notas. control, esta propiedad debe exponer una
referencia a ese control. Si el control de texto es un
subcomponente de otro control, no tendrá un
conjunto de propiedades LabeledBy .
Propiedad de Valor Notas
automatización de interfaz
de usuario

ControlTypeProperty Control Este valor es el mismo para todos los marcos de


deslizante trabajo de la interfaz de usuario.

LocalizedControlTypeProperty "control Cadena localizada que corresponde al tipo de


deslizante" control Edit Control.

IsContentElementProperty True El control de edición siempre se incluye en la vista


de contenido del árbol de UI Automation.

IsControlElementProperty True El control de edición siempre se incluye en la vista


de control del árbol de UI Automation.

Patrones de control de Automatización de la


interfaz de usuario necesarios
La siguiente tabla enumera los patrones de control de UI Automation que deben
soportar todos los controles deslizantes. Para más información sobre los patrones de
control, vea UI Automation Control Patterns Overview.

Patrón de control Soporte Notas


técnico

ISelectionProvider Depende Un control deslizante debe admitir el patrón de control


Selection si el contenido representa un valor entre un conjunto
discreto de opciones. Si se admite el patrón de control
Selection, la selección correspondiente se debe exponer como
uno o varios elementos de lista secundarios del control
deslizante.

IRangeValueProvider Depende Un control deslizante debe admitir el patrón de control


RangeValue si el contenido se puede establecer en un valor
dentro de un intervalo numérico.

IValueProvider Depende Un control deslizante debe admitir el patrón de control Value


si el contenido representa un valor entre un conjunto discreto
de opciones.

Eventos de Automatización de la interfaz de


usuario necesarios
La siguiente tabla enumera los eventos de UI Automation que deben ser soportados por
todos los controles deslizantes.

Para más información sobre los eventos, vea UI Automation Events Overview.

Evento de Automatización de la interfaz de usuario Soporte técnico Notas

InvalidatedEvent Depende None

Evento de cambio de propiedadBoundingRectangleProperty . Obligatorio None

Evento de cambio de propiedadIsOffscreenProperty . Obligatorio None

Evento de cambio de propiedadIsEnabledProperty . Obligatorio None

Evento de cambio de propiedadValueProperty . Depende None

AutomationFocusChangedEvent Obligatorio None

StructureChangedEvent Obligatorio None

Consulte también
Slider
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de automatización de la
IU para el tipo de control Spinner
Artículo • 09/05/2023

7 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.

Este tema proporciona información sobre la compatibilidad de UI Automation con el


tipo de control Spinner. En UI Automation, un tipo de control es un conjunto de
condiciones que un control debe cumplir para poder usar la propiedad
ControlTypeProperty. Las condiciones incluyen directrices específicas para la estructura
de árbol de UI Automation , los valores de propiedad de esta y los patrones de control.

Los controles Spinner se usan para seleccionar desde un dominio de elementos o un


intervalo de números.

Las siguientes secciones definen la estructura de árbol de automatización de UI


Automation, las propiedades, los patrones de control y los eventos para el tipo de
control Spinner. Los requisitos de UI Automation se aplican a todos los controles de
número, ya sea Windows Presentation Foundation (WPF), Win32 o Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
La siguiente tabla muestra la vista de control y la vista de contenido del árbol de UI
Automation que pertenecen a los controles de los spinners cuando soportan los
patrones de control Range Value, Value y Selection y describe lo que puede contener
cada vista. Para más información sobre el árbol de automatización de la interfaz de
usuario, consulte Introducción al árbol de automatización de la interfaz de usuario.

Patrón de control Range Value o Value

Vista de control Vista de contenido


Vista de control Vista de contenido

Spinner Spinner

- Edición (0 o 1)
- Botón (2)

Selection (patrón de control)

Vista de control Vista de contenido

Spinner Spinner

- Edición (0 o 1) - ListItem (0 o más)


- Botón (2)
- Elemento de lista (0 o más)

Para garantizar que los dos botones del subárbol de la vista de control se pueden
distinguir por herramientas de pruebas automatizadas, asigne SmallIncrement o
SmallDecrement AutomationId , según corresponda. Para algunas implementaciones, el

control Edit asociado puede ser del mismo nivel que el control Spinner.

Propiedades de Automatización de la interfaz


de usuario necesarias
La siguiente tabla enumera las propiedades de UI Automation cuyo valor o definición es
especialmente relevante para los controles spinner. Para más información sobre las
propiedades de automatización de la interfaz de usuario, consulte Propiedades de
automatización de la interfaz de usuario: Propiedades para clientes.

Propiedad de Valor Notas


automatización de interfaz
de usuario

AutomationIdProperty Vea las El valor de esta propiedad debe ser único en todos
notas. los controles de una aplicación.

BoundingRectangleProperty Vea las El rectángulo exterior que contiene el control


notas. completo.

ClickablePointProperty Vea las El punto en el que se puede hacer clic del control de
notas. número enfoca la parte de edición del control.

IsKeyboardFocusableProperty Vea las Si el control puede recibir el foco del teclado, debe
notas. admitir esta propiedad.
Propiedad de Valor Notas
automatización de interfaz
de usuario

NameProperty Vea las El control de número suele recibir su nombre de una


notas. etiqueta de texto estático.

LabeledByProperty Vea las Los controles de número tienen una etiqueta de


notas. texto estático.

ControlTypeProperty Spinner Este valor es el mismo para todos los marcos de


trabajo de la interfaz de usuario.

LocalizedControlTypeProperty "control Cadena localizada que corresponde al tipo de


de control Spinner.
número"

IsContentElementProperty True El control de número siempre debe ser contenido.

IsControlElementProperty True El control de número siempre debe ser un control.

Propiedades y patrones de control de


Automatización de la interfaz de usuario
necesarios
En la siguiente tabla se enumeran los patrones de control de UI Automation que deben
ser compatibles con los controles spinner Para más información sobre los patrones de
control, vea UI Automation Control Patterns Overview.

Patrón de Soporte Notas


control/Propiedad técnico/valor
de patrón

ISelectionProvider Depende Los controles de número que tienen una lista de


elementos que se van a seleccionar deben admitir este
patrón.

CanSelectMultiple False Los controles de número siempre son contenedores de


selección única.

IRangeValueProvider Depende Los controles de número que abarcan un intervalo


numérico pueden admitir este patrón.

IValueProvider Depende Los controles de número que abarcan un conjunto


discreto de opciones o números pueden admitir este
patrón.
Eventos de Automatización de la interfaz de
usuario necesarios
La siguiente tabla enumera los eventos de UI Automation que se requieren para admitir
todos los controles del spinner. Para más información sobre los eventos, vea UI
Automation Events Overview.

Evento de Automatización de la interfaz de usuario Soporte técnico Notas

InvalidatedEvent Depende None

Evento cambiado por propiedadBoundingRectangleProperty . Obligatorio None

Evento cambiado por propiedadIsOffscreenProperty . Obligatorio None

Evento cambiado por propiedadIsEnabledProperty . Obligatorio None

Evento cambiado por propiedadValueProperty . Depende None

Evento cambiado por propiedadValueProperty . Depende None

AutomationFocusChangedEvent Obligatorio None

StructureChangedEvent Obligatorio None

Consulte también
Spinner
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de UI Automation para
el tipo de control SplitButton
Artículo • 08/04/2023

7 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.

Este tema proporciona información sobre la compatibilidad de la Automatización de la


interfaz de usuario con el tipo de control de SplitButton. En Automatización de la
interfaz de usuario, un tipo de control es un conjunto de condiciones que un control
debe cumplir para poder usar la propiedad ControlTypeProperty. Las condiciones
incluyen directrices específicas para la estructura de árbol de Automatización de la
interfaz de usuario, los valores de propiedad de Automatización de la interfaz de usuario
y los patrones de control.

El control de botón de expansión permite la capacidad de realizar una acción en un


control y expandir el control para ver una lista de otras acciones posibles que se pueden
realizar.

Las siguientes secciones definen la estructura de árbol de Automatización de la interfaz


de usuario, las propiedades, los patrones de control y los eventos para el tipo de control
de SplitButton. Los requisitos de Automatización de la interfaz de usuario se aplican a
todos los controles de botón de expansión, ya sea Windows Presentation Foundation
(WPF), Win32 o Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
En la siguiente tabla se muestra la vista de control y la vista de contenido del árbol de
Automatización de la interfaz de usuario que pertenece a los controles de botón de
expansión y describe lo que puede contener cada vista. Para más información sobre el
árbol de UI Automation, vea Información general del árbol de UI Automation.
Vista de control Vista de
contenido

SplitButton SplitButton

- MenuItem (de 1
Image (0 o 1) a varios)
Text (0 o 1)
Button (1 o 2)

Menu (0 o 1; aparece como elemento secundario del botón que


admite el patrón ExpandCollapse)
MenuItem (1 o varios)

Propiedades de Automatización de la interfaz


de usuario necesarias
En la siguiente tabla se enumeran las propiedades de Automatización de la interfaz de
usuario cuyo valor o definición es especialmente relevante para los controles de botón
de expansión. Para más información sobre las propiedades de Automatización de la
interfaz de usuario, vea Propiedades de Automatización de la interfaz de usuario para
clientes.

Propiedad de Valor Notas


automatización de interfaz
de usuario

AutomationIdProperty Vea las El valor de esta propiedad debe ser único en todos
notas. los controles de una aplicación.

BoundingRectangleProperty Vea las El rectángulo exterior que contiene el control


notas. completo.

ClickablePointProperty Vea las Se admite si hay un rectángulo delimitador. Si no


notas. todos los puntos que se encuentran dentro del
rectángulo delimitador son seleccionables, y realiza
pruebas de aciertos especializadas, invalide y
ofrezca un punto en el que hacer clic.

IsKeyboardFocusableProperty Vea las Si el control puede recibir el foco del teclado, debe
notas. admitir esta propiedad.

NameProperty "Atrás" El nombre del control de botón de expansión se


muestra en el botón.
Propiedad de Valor Notas
automatización de interfaz
de usuario

LabeledByProperty Null Los controles de botón de expansión no tienen una


etiqueta de texto estático.

ControlTypeProperty SplitButton Este valor es el mismo para todos los marcos de


trabajo de la interfaz de usuario.

LocalizedControlTypeProperty "botón de Cadena localizada que corresponde al tipo de


expansión" control SplitButton.

HelpTextProperty Vea las El texto de ayuda puede indicar el resultado de la


notas. activación del botón de división, que normalmente
es el mismo tipo de información que se presenta
mediante un elemento de información sobre
herramientas.

IsContentElementProperty True El control de botón de división contiene


información para el usuario final.

IsControlElementProperty True El control de botón de división es visible para el


usuario final.

Patrones de control de Automatización de la


interfaz de usuario necesarios
En la siguiente tabla se enumeran los patrones de control de Automatización de la
interfaz de usuario que deben ser compatibles con los controles de botón de expansión.
Para más información sobre los patrones de control, vea UI Automation Control Patterns
Overview.

Patrón de control Soporte Notas


técnico

IInvokeProvider Obligatorio Los botones de expansión siempre tienen una acción


predeterminada asociada a Invoke.

IExpandCollapseProvider Obligatorio Los botones de expansión siempre tienen la capacidad


de expandir una lista de opciones.

Eventos de Automatización de la interfaz de


usuario necesarios
La siguiente tabla enumera los eventos de Automatización de la interfaz de usuario que
deben ser compatibles con todos los controles de botón de expansión. Para más
información sobre los eventos, vea UI Automation Events Overview.

Evento de Automatización de la interfaz de usuario Soporte técnico Notas

InvokedEvent Obligatorio None

Evento cambiado por propiedadBoundingRectangleProperty . Obligatorio None

Evento cambiado por propiedadIsOffscreenProperty . Obligatorio None

Evento cambiado por propiedadIsEnabledProperty . Obligatorio None

Evento cambiado por propiedadExpandCollapseStateProperty . Obligatorio None

AutomationFocusChangedEvent Obligatorio None

StructureChangedEvent Obligatorio None

Ejemplo de control SplitButton


En la imagen siguiente se muestra un tipo de control SplitButton en un control de
cuadrícula de datos.

A continuación se muestran la vista de control y la vista de contenido del árbol de


Automatización de la interfaz de usuario que pertenece a los controles de botón de
división y de cuadrícula de datos. Los patrones de control de cada elemento de
automatización se muestran entre paréntesis.

Árbol de Automatización de la interfaz de Árbol de Automatización de la interfaz de


usuario: vista de control usuario: vista de contenido

SplitButton "Nombre" (Invoke, SplitButton "Nombre" (Invoke,


ExpandCollapse) ExpandCollapse)
Button "Más opciones" (Invoke) Button "Más opciones" (Invoke)

Menú Menú
MenuItem MenuItem
… …

Consulte también
SplitButton
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de UI Automation para
el tipo de control StatusBar
Artículo • 10/05/2023

7 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 ofrece información sobre la compatibilidad de la automatización de la


interfaz de usuario con el tipo de control StatusBar. En la automatización de la interfaz
de usuario, un tipo de control es un conjunto de condiciones que un control debe
cumplir para poder usar la propiedad ControlTypeProperty. Las condiciones incluyen
directrices específicas para la estructura de árbol de la automatización de la interfaz de
usuario, los valores de propiedad de esta y los patrones de control.

Un control de barra de estado muestra información sobre un objeto que se ve en una


ventana de una aplicación, el componente del objeto o información contextual relativa a
esa operación del objeto en la aplicación.

En las secciones siguientes se definen la estructura de árbol de Automatización de la


interfaz de usuario, las propiedades, los patrones de control y los eventos necesarios
para el tipo de control StatusBar. Los requisitos de automatización de la interfaz de
usuario se aplican a todos los controles de barra de estado, ya sea Windows
Presentation Foundation (WPF), Win32 o Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
En la tabla siguiente se describe la vista de control y la vista de contenido del árbol de
Automatización de la interfaz de usuario que pertenece a los controles de barra de
estado y se describe lo que puede incluirse en cada vista. Para más información sobre el
árbol de automatización de la interfaz de usuario, consulte Introducción al árbol de
automatización de la interfaz de usuario.
Vista de control Vista de contenido

StatusBar StatusBar

- Edición (0 o más) - Edición (0 o más)


- Barra de progreso (0 o muchos) - ProgressBar (0 o muchos)
- Imagen (0 o muchos) - Imagen (0 o muchos)
- Botón (0 o muchos) - Botón (0 o muchos)

Propiedades de Automatización de la interfaz


de usuario necesarias
En la tabla siguiente se muestran las propiedades de automatización de la interfaz de
usuario cuyo valor o definición es especialmente importante para los controles de la
barra de progreso. Para más información sobre las propiedades de automatización de la
interfaz de usuario, consulte Propiedades de automatización de la interfaz de usuario
para clientes.

Propiedad de Valor Notas


automatización de interfaz
de usuario

AutomationIdProperty Vea las El valor de esta propiedad debe ser único en todos
notas. los controles de una aplicación.

BoundingRectangleProperty Vea las El rectángulo delimitador de una barra de estado


notas. debe abarcar todos los controles que incluye.

ClickablePointProperty Vea las Se admite si hay un rectángulo delimitador. Si no


notas. todos los puntos que se encuentran dentro del
rectángulo delimitador son seleccionables, y realiza
pruebas de aciertos especializadas, invalide y ofrezca
un punto en el que hacer clic.

IsKeyboardFocusableProperty Vea las Si el control puede recibir el foco del teclado, debe
notas. admitir esta propiedad.

NameProperty Vea las El control de barra de estado no necesita un nombre


notas. a menos que se use más de uno dentro de una
aplicación. En este caso, distinga cada barra con
nombres como "Estado de Internet" o "Estado de la
aplicación".

LabeledByProperty Null Normalmente, el control de la barra de título no tiene


una etiqueta.
Propiedad de Valor Notas
automatización de interfaz
de usuario

ControlTypeProperty StatusBar Este valor es el mismo para todos los marcos de


trabajo de la interfaz de usuario.

LocalizedControlTypeProperty "barra de Cadena localizada que corresponde al tipo de control


estado" StatusBar.

IsContentElementProperty True El control de barra de estado siempre incluye


contenido.

IsControlElementProperty True El control de barra de estado siempre es un control.

IsOffscreenProperty Depende Un control de barra de estado devolverá True para


esta propiedad si no está visible actualmente en la
pantalla.

OrientationProperty Depende El valor de la orientación del control: horizontal o


vertical.

IsKeyboardFocusableProperty False No aplicable

AcceleratorKeyProperty Null Las barras de estado no tienen teclas de aceleración.

Patrones de control de Automatización de la


interfaz de usuario necesarios
En la tabla siguiente se muestran los patrones de control de automatización de la
interfaz de usuario necesarios para que todos los controles de barra de estado los
admitan. Para más información sobre los patrones de control, vea UI Automation
Control Patterns Overview.

Patrón de Soporte Notas


control técnico

IGridProvider Opcional Los controles de barra de estado deben admitir el patrón de control
de cuadrícula para que se puedan supervisar las piezas individuales y
se haga referencia a ellas de manera sencilla para obtener
información.

Eventos de Automatización de la interfaz de


usuario necesarios
En la tabla siguiente se muestran los eventos de automatización de la interfaz de
usuario que se deben admitir por parte de todos los controles de barra de estado. Para
más información sobre eventos, vea UI Automation Events Overview.

Evento de Automatización de la interfaz de usuario Soporte técnico Notas

Evento cambiado por propiedadBoundingRectangleProperty . Obligatorio None

Evento cambiado por propiedadIsOffscreenProperty . Obligatorio None

Evento cambiado por propiedadIsEnabledProperty . Obligatorio None

AutomationFocusChangedEvent Obligatorio None

StructureChangedEvent Obligatorio None

Consulte también
StatusBar
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de UI Automation para
el tipo de control Tab
Artículo • 10/05/2023

7 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 ofrece información sobre la compatibilidad de Automatización de la


interfaz de usuario con el tipo de control pestaña. En UI Automation, un tipo de control
es un conjunto de condiciones que un control debe cumplir para poder usar la
propiedad ControlTypeProperty. Las condiciones incluyen directrices específicas para la
estructura de árbol de UI Automation, los valores de propiedad de esta y UI Automation.
patrones de control.

Un control de ficha es análogo a los divisores de un bloc de notas o las etiquetas de un


archivador. Mediante el uso de un control de ficha, una aplicación puede definir varias
páginas para la misma área de un cuadro de diálogo o de una ventana.

En las secciones siguientes se definen la estructura de árbol, las propiedades, los


patrones de control y los eventos para el tipo de control pestaña de UI Automation
necesarios. Los requisitos de Automatización de la interfaz de usuario se aplican a todos
los controles de pestaña, ya sea Windows Presentation Foundation (WPF), Win32 o
Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
En la tabla siguiente se describe la vista de control y la vista de contenido del árbol de
UI Automation que pertenece a los controles de pestaña y se describe lo que puede
incluirse en cada vista. Para más información sobre el árbol de automatización de la
interfaz de usuario, consulte Introducción al árbol de automatización de la interfaz de
usuario.
Vista de control Vista de contenido

Pestaña Pestaña

- TabItem (1 o más)
TabItem (1 o más)
ScrollBar (0 o 1)

Button (0 o 2)

Los controles de pestaña tienen elementos UI Automation secundarios basados en el


tipo de control de pestaña Item. Cuando se agrupan los elementos de ficha (por
ejemplo, como sucede en las aplicaciones de Microsoft Office 2007), el tipo de control
Tab también puede hospedar los tipos de control Groups para los elementos de ficha
agrupados, como muestra la siguiente estructura de árbol.

Vista de control Vista de contenido

Pestaña Pestaña

TabItem (1 o más) TabItem (1 o más)


Group (0 o más) Group (0 o más)

TabItem (0 o más) TabItem (0 o más)


ScrollBar (0 o más)

Button (0 o 2)

Propiedades de Automatización de la interfaz


de usuario necesarias
La siguiente tabla enumera las propiedades de UI Automation cuyo valor o definición es
especialmente relevante para el tipo de control de pestaña. Para más información sobre
las propiedades de UI Automation, consulte Propiedades de UI Automation:
Propiedades para clientes.

Propiedad de Valor Notas


automatización de interfaz
de usuario

AutomationIdProperty Vea las El valor de esta propiedad debe ser único en todos los
notas. controles de una aplicación.
Propiedad de Valor Notas
automatización de interfaz
de usuario

BoundingRectangleProperty Vea las El rectángulo exterior que contiene el control


notas. completo.

IsKeyboardFocusableProperty Vea las Si el control puede recibir el foco del teclado, debe
notas. admitir esta propiedad.

NameProperty Vea las El control de ficha rara vez requiere una propiedad
notas. Name.

ClickablePointProperty No El control de ficha no tiene un punto donde hacer clic.

LabeledByProperty Vea las Los controles de ficha suelen tener una etiqueta de
notas. texto estático que se expone a través de esta
propiedad.

ControlTypeProperty Pestaña Este valor es el mismo para todos los marcos de


trabajo de la interfaz de usuario.

LocalizedControlTypeProperty "ficha" Cadena localizada que corresponde al tipo de control


Tab.

IsKeyboardFocusableProperty True El tipo de control Tab debe poder recibir el foco de


teclado. Normalmente, un cliente de UI Automation
llama a SetFocus en un control de ficha y uno de sus
elementos reenvía el foco del teclado al control de
ficha. Es posible que algunos contenedores de ficha
obtengan el foco sin haber establecido el foco en uno
de sus elementos.

IsContentElementProperty True El control de pestaña siempre se incluye en la vista de


contenido del árbol de UI Automation.

IsControlElementProperty True El control de pestaña siempre se incluye en la vista de


control del árbol de UI Automation.

OrientationProperty Vea las El control de ficha siempre debe indicar si está


notas. colocado horizontal o verticalmente.

Propiedades y patrones de control de


Automatización de la interfaz de usuario
necesarios
La siguiente tabla enumera los patrones de control de UI Automation que deben
soportar todos los controles de pestaña. Para más información sobre los patrones de
control, vea UI Automation Control Patterns Overview.

Patrón de Soporte Notas


control/Propiedad técnico/valor
de patrón

ISelectionProvider Sí Todos los controles de ficha deben admitir el patrón


Selection.

IsSelectionRequired True Los controles de ficha siempre requieren que se realice


una selección.

CanSelectMultiple False Los controles de ficha siempre son contenedores de


selección única.

IScrollProvider Depende El patrón Scroll se debe admitir en el control de ficha que


tiene widgets que permiten el desplazamiento por un
conjunto de elementos de ficha.

Eventos de Automatización de la interfaz de


usuario necesarios
En la tabla siguiente se muestran los eventos de UI Automation que se deben admitir
por parte de todos los controles de pestaña. Para más información sobre los eventos,
vea UI Automation Events Overview.

Evento de Automatización de la interfaz de usuario Soporte técnico Notas

Evento cambiado por propiedadBoundingRectangleProperty . Obligatorio None

Evento cambiado por propiedadIsOffscreenProperty . Obligatorio None

Evento cambiado por propiedadIsEnabledProperty . Obligatorio None

Evento cambiado por propiedadHorizontallyScrollableProperty . Depende None

Evento cambiado por propiedadHorizontalScrollPercentProperty . Depende None

Evento cambiado por propiedadHorizontallyScrollableProperty . Depende None

Evento cambiado por propiedadHorizontalViewSizeProperty . Depende None

Evento cambiado por propiedadVerticalScrollPercentProperty . Depende None

Evento cambiado por propiedadVerticalViewSizeProperty . Depende None

AutomationFocusChangedEvent Obligatorio None


Evento de Automatización de la interfaz de usuario Soporte técnico Notas

StructureChangedEvent Obligatorio None

Consulte también
Tab
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de UI Automation para
el tipo de control TabItem
Artículo • 10/05/2023

7 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 ofrece información sobre la compatibilidad de la automatización de la


interfaz de usuario con el tipo de control TabItem. En la automatización de la interfaz de
usuario, un tipo de control es un conjunto de condiciones que un control debe cumplir
para poder usar la propiedad ControlTypeProperty. Las condiciones incluyen directrices
específicas para la estructura de árbol de la automatización de la interfaz de usuario, los
valores de propiedad de esta y los patrones de control.

Un control de elemento de ficha se utiliza como el control dentro de un control de ficha


que selecciona una página concreta para que se muestre en una ventana.

En las secciones siguientes se definen la estructura de árbol, las propiedades, los


patrones de control y los eventos para el tipo de control TabItem de la automatización
de la interfaz de usuario necesarios. Los requisitos de la automatización de la interfaz de
usuario se aplican a todos los controles de elementos de la pestaña, ya sea Windows
Presentation Foundation (WPF), Win32 o Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
En la tabla siguiente se describe la vista de control y la vista de contenido del árbol de
Automatización de la interfaz de usuario que pertenece a los controles de elemento de
la pestaña y se describe lo que puede incluirse en cada vista. Para más información
sobre el árbol de automatización de la interfaz de usuario, consulte Introducción al árbol
de automatización de la interfaz de usuario.

Vista de control Vista de contenido


Vista de control Vista de contenido

TabItem TabItem

Image (0 o 1) Panel
Texto
Panel Varios controles (0 o más)

Varios controles (0 o más)

Propiedades de Automatización de la interfaz


de usuario necesarias
En la tabla siguiente se muestran las propiedades de automatización de la interfaz de
usuario cuyo valor o definición es especialmente relevante para los controles de
elemento de pestaña. Para más información sobre las propiedades de automatización
de la interfaz de usuario, consulte Propiedades de automatización de la interfaz de
usuario: Propiedades para clientes.

Propiedad de Valor Notas


automatización de interfaz
de usuario

AutomationIdProperty Vea las El valor de esta propiedad debe ser único en todos
notas. los controles de una aplicación.

BoundingRectangleProperty Vea las El rectángulo exterior que contiene el control


notas. completo.

ClickablePointProperty Vea las El control de elemento de ficha debe tener un punto


notas. en el que se pueda hacer clic que haga que se
seleccione el elemento.

IsKeyboardFocusableProperty Vea las Si el control puede recibir el foco del teclado, debe
notas. admitir esta propiedad.

NameProperty Vea las El control de elemento de ficha se etiqueta


notas. automáticamente.

LabeledByProperty Null El control de elemento de ficha no tiene una


etiqueta de texto estático.

ControlTypeProperty TabItem Este valor es el mismo para todos los marcos de


trabajo de la interfaz de usuario.
Propiedad de Valor Notas
automatización de interfaz
de usuario

LocalizedControlTypeProperty "elemento Cadena localizada que corresponde a este tipo de


de ficha" control.

IsContentElementProperty True El control de elemento de ficha siempre debe ser


contenido.

IsControlElementProperty True El control de elemento de ficha siempre debe ser un


control.

Patrones de control de Automatización de la


interfaz de usuario necesarios
En la tabla siguiente se muestran los patrones de control de automatización de la
interfaz de usuario que se deben admitir por los controles de elemento de la pestaña.
Para más información sobre los patrones de control, vea UI Automation Control Patterns
Overview.

Patrón de control Soporte Notas


técnico

ISelectionItemProvider Sí El control de elemento de ficha debe admitir


SelectionItemPattern.

IInvokeProvider No El control de elemento de ficha nunca admite


InvokePattern.

Eventos de Automatización de la interfaz de


usuario necesarios
En la siguiente tabla se muestra los eventos de Automatización de la interfaz de usuario
requeridos para ser admitidos por todos los controles de elemento de la pestaña. Para
más información sobre eventos, vea UI Automation Events Overview.

Evento de Automatización de la interfaz de usuario Soporte técnico Notas

Evento cambiado por propiedadBoundingRectangleProperty . Obligatorio None

Evento cambiado por propiedadIsOffscreenProperty . Obligatorio None

Evento cambiado por propiedadIsEnabledProperty . Obligatorio None


Evento de Automatización de la interfaz de usuario Soporte técnico Notas

AutomationFocusChangedEvent Obligatorio None

ElementSelectedEvent Obligatorio None

ElementRemovedFromSelectionEvent Obligatorio None

StructureChangedEvent Obligatorio None

Consulte también
TabItem
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de UI Automation para
el tipo de control Table
Artículo • 10/05/2023

7 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 ofrece información sobre la compatibilidad de Automatización de la


interfaz de usuario con el tipo de control de tabla. En Automatización de la interfaz de
usuario, un tipo de control es un conjunto de condiciones que un control debe cumplir
para poder usar la propiedad ControlTypeProperty. Las condiciones incluyen directrices
específicas para la estructura de árbol de Automatización de la interfaz de usuario, los
valores de propiedad de Automatización de la interfaz de usuario y los patrones de
control.

Los controles Table contienen filas y columnas de texto y, opcionalmente, encabezados


de filas y encabezados de columna.

En las secciones siguientes se definen la estructura de árbol, las propiedades, los


patrones de control y los eventos para el tipo de control Table de Automatización de la
interfaz de usuario necesarios. Los requisitos de Automatización de la interfaz de
usuario se aplican a todos los controles de tabla, ya sea Windows Presentation
Foundation (WPF), Win32 o Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
En la tabla siguiente se describe la vista de control y la vista de contenido del árbol de
Automatización de la interfaz de usuario que pertenece a los controles de tabla y se
describe lo que puede incluirse en cada vista. Para más información sobre el árbol de
Automatización de la interfaz de usuario, consulte Introducción al árbol de
Automatización de la interfaz de usuario.
Vista de control Vista de contenido

Tabla Tabla

- Encabezado (0 o 1) - Texto (0 o más)


- Texto (0 o 1) -Varios controles (0 o más)
-Varios controles (0 o más)

Si un control de tabla tiene encabezados de fila o columna, se deben exponer en la Vista


de control del árbol de la automatización de la interfaz de usuario. La Vista de
contenido no tiene que exponer esta información porque se puede tener acceso a ella
mediante TablePattern.

Propiedades de Automatización de la interfaz


de usuario necesarias
En la tabla siguiente se muestran las propiedades de Automatización de la interfaz de
usuario cuyo valor o definición es especialmente relevante para los controles de tabla.
Para más información sobre las propiedades de Automatización de la interfaz de
usuario, consulte Propiedades de Automatización de la interfaz de usuario para clientes.

Propiedad de Valor Notas


automatización de interfaz
de usuario

AutomationIdProperty Vea El valor de esta propiedad debe ser único en todos los
las controles de una aplicación.
notas.

BoundingRectangleProperty Vea El rectángulo exterior que contiene el control completo.


las
notas.

ClickablePointProperty Vea Se admite si hay un rectángulo delimitador. Si no todos


las los puntos que se encuentran dentro del rectángulo
notas. delimitador son seleccionables, y realiza pruebas de
aciertos especializadas, invalide y ofrezca un punto en el
que hacer clic.

IsKeyboardFocusableProperty Vea Si el control puede recibir el foco del teclado, debe


las admitir esta propiedad.
notas.
Propiedad de Valor Notas
automatización de interfaz
de usuario

NameProperty Vea El control de tabla suele recibir su nombre de una


las etiqueta de texto estático. Si no hay ninguna etiqueta
notas. de texto estático, debe asignar una propiedad Name
que deba estar siempre disponible para explicar el
objetivo de la tabla.

LabeledByProperty Vea Si hay una etiqueta de texto estático, esta propiedad


las debe exponer una referencia al elemento de
notas. automatización del control.

ControlTypeProperty Tabla Este valor es el mismo para todos los marcos de trabajo
de la interfaz de usuario.

LocalizedControlTypeProperty "table" Cadena localizada que corresponde al tipo de control


Table.

HelpTextProperty Vea Se deben obtener más detalles sobre la finalidad de la


las tabla a través de esta propiedad si no queda
notas. suficientemente explicada mediante el acceso a
NameProperty.

IsContentElementProperty True El control de tabla siempre debe ser contenido.

IsControlElementProperty True El control de tabla siempre debe ser un control.

Patrones de control de Automatización de la


interfaz de usuario necesarios
En la tabla siguiente se muestran los patrones de control de Automatización de la
interfaz de usuario requeridos para ser admitidos por los controles de tabla. Para más
información sobre los patrones de control, vea UI Automation Control Patterns
Overview.

Patrón de control Soporte Notas


técnico

IGridProvider Sí El control de tabla siempre admite este patrón de control


porque los elementos que contiene tienen datos que se
presentan en una cuadrícula.
Patrón de control Soporte Notas
técnico

IGridItemProvider Sí (se Los objetos internos de una tabla deben admitir tanto el
requiere con patrón de control GridItem como TableItem. La propia tabla
objetos no necesita admitir los patrones de control GridItem o
secundarios) TableItem, a menos que la tabla forme parte de otra tabla.

ITableProvider Sí El control de tabla siempre tiene la capacidad de tener


encabezados asociados al contenido.

ITableItemProvider Sí (se Los objetos internos de una tabla deben admitir tanto el
requiere con patrón de control GridItem como TableItem. La propia tabla
objetos no necesita admitir los patrones de control GridItem o
secundarios) TableItem, a menos que la tabla forme parte de otra tabla.

Eventos de Automatización de la interfaz de


usuario necesarios
En la tabla siguiente se muestran los eventos de UI Automation que se deben admitir
por parte de todos los controles de tabla. Para más información sobre los eventos, vea
UI Automation Events Overview.

Evento de Automatización de la interfaz de usuario Soporte técnico Notas

Evento cambiado por propiedadBoundingRectangleProperty . Obligatorio None

Evento cambiado por propiedadIsOffscreenProperty . Obligatorio None

Evento cambiado por propiedadIsEnabledProperty . Obligatorio None

AutomationFocusChangedEvent Obligatorio None

StructureChangedEvent Obligatorio None

Consulte también
Table
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de UI Automation para
el tipo de control Text
Artículo • 10/05/2023

7 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 ofrece información sobre la compatibilidad de UI Automation con el


tipo de control de texto. En UI Automation, un tipo de control es un conjunto de
condiciones que un control debe cumplir para poder usar la propiedad
ControlTypeProperty. Las condiciones incluyen directrices específicas para la estructura
de árbol de UI Automation, los valores de propiedad de automatización de la interfaz de
usuario y los patrones de control.

Los controles de texto son el elemento básico de la interfaz de usuario que representa
un fragmento de texto en la pantalla.

En las secciones siguientes se definen la estructura de árbol, las propiedades, los


patrones de control y los eventos para el tipo de control de texto de UI Automation
necesarios. Los requisitos de automatización de la interfaz de usuario se aplican a todos
los controles de texto, ya sea Windows Presentation Foundation (WPF), Win32 o
Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
En la tabla siguiente se describe la vista de control y la vista de contenido del árbol de
UI Automation que pertenece a los controles de texto y se describe lo que puede
incluirse en cada vista. Para más información sobre el árbol de UI Automation, vea
Información general del árbol de UI Automation.

Vista de control Vista de contenido

Texto Texto (si hay contenido)


Un control de texto se puede usar solo como una etiqueta o como texto estático en un
formulario. También puede estar dentro de la estructura de un:

ListItem

TreeItem

DataItem

Es posible que los controles de texto no estén en la vista de contenido del árbol de UI
Automation porque el texto se suele mostrar a través del elemento NameProperty de
otro control. Por ejemplo, el texto que se utiliza para etiquetar un control Combo Box se
expone a través del valor NameProperty del control. Como control Combo Box está en la
vista de contenido del árbol de Automatización de la interfaz de usuario, no es
necesario que el control de texto esté ahí. Los controles de texto siempre tienen 0
elementos secundarios en la vista de contenido

Propiedades de Automatización de la interfaz


de usuario necesarias
En la tabla siguiente se muestran las propiedades de UI Automation cuyo valor o
definición es especialmente relevante para los controles de texto. Para más información
sobre las propiedades de UI Automation, vea Propiedades de UI Automation Properties
for clients.

Propiedad de Valor Notas


automatización de interfaz
de usuario

AutomationIdProperty Vea las El valor de esta propiedad debe ser único en todos
notas. los controles de una aplicación.

BoundingRectangleProperty Vea las El rectángulo exterior que contiene el control


notas. completo.

ClickablePointProperty Vea las Se admite si hay un rectángulo delimitador. Si no


notas. todos los puntos que se encuentran dentro del
rectángulo delimitador son seleccionables, y realiza
pruebas de aciertos especializadas, invalide y ofrezca
un punto en el que hacer clic.

IsKeyboardFocusableProperty Vea las Si el control puede recibir el foco del teclado, debe
notas. admitir esta propiedad.
Propiedad de Valor Notas
automatización de interfaz
de usuario

NameProperty Vea las El nombre del control de barra de texto siempre es el


notas. texto que muestra.

LabeledByProperty Null Los controles de texto no tienen una etiqueta de


texto estático.

ControlTypeProperty Texto Este valor es el mismo para todos los marcos de


trabajo de la interfaz de usuario.

LocalizedControlTypeProperty "text" Cadena localizada que corresponde al tipo de control


de texto.

IsContentElementProperty Depende El control de texto será contenido si incluye


información no expuesta en el elemento
NameProperty de otro control.

IsControlElementProperty True El control de texto siempre debe ser un control.

Patrones de control de Automatización de la


interfaz de usuario necesarios
En la tabla siguiente se muestran los patrones de control de automatización de la
interfaz de usuario que se deben admitir por los controles de texto. Para más
información sobre los patrones de control, vea UI Automation Control Patterns
Overview.

Patrón de control Soporte Notas


técnico

IValueProvider Nunca El texto nunca admite ValuePattern. Si el texto es editable, este


es el tipo de control Edit.

ITextProvider Depende El texto debería admitir el patrón de control Text para mejorar
la accesibilidad; sin embargo, no es obligatorio. El patrón de
control Text es útil cuando el texto tiene atributos y estilo
enriquecidos (por ejemplo, color, negrita y cursiva). Depende
del marco.

ITableItemProvider Depende Si el elemento de texto está contenido dentro de un control


Table, debe admitirse.

IRangeValueProvider Depende Si el elemento de texto está contenido dentro de un control


Table, debe admitirse.
Eventos de Automatización de la interfaz de
usuario necesarios
En la tabla siguiente se muestran los eventos de UI Automation que se deben admitir
por parte de todos los controles de texto. Para más información sobre eventos, vea UI
Automation Events Overview.

Evento de Automatización de la interfaz de usuario Soporte técnico Notas

TextSelectionChangedEvent Obligatorio None

TextChangedEvent Obligatorio None

Evento cambiado por propiedadBoundingRectangleProperty . Obligatorio None

Evento cambiado por propiedadIsOffscreenProperty . Obligatorio None

Evento cambiado por propiedadIsEnabledProperty . Obligatorio None

Evento cambiado por propiedadNameProperty . Obligatorio None

Evento cambiado por propiedadValueProperty . Nunca None

AutomationFocusChangedEvent Obligatorio None

StructureChangedEvent Obligatorio None

Consulte también
Text
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de automatización de la
interfaz de usuario para el tipo de
control de posición
Artículo • 09/05/2023

7 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 ofrece información sobre la compatibilidad de Automatización de la


interfaz de usuario con el tipo de control Thumb. En Automatización de la interfaz de
usuario, un tipo de control es un conjunto de condiciones que un control debe cumplir
para poder usar la propiedad ControlTypeProperty. Las condiciones incluyen directrices
específicas para la estructura de árbol de Automatización de la interfaz de usuario, los
valores de propiedad de Automatización de la interfaz de usuario y los patrones de
control.

Los controles de posición ofrecen la funcionalidad que permite que un control se mueva
(o se arrastre), como un botón de barra de desplazamiento, o que cambie su tamaño,
como un widget para cambiar el tamaño de una ventana. Los controles de posición
también pueden implementarse como bordes movibles de paneles. Tenga en cuenta
que no ofrece funcionalidad de arrastrar y colocar. Los controles de posición pueden
recibir el foco del mouse, pero el foco del teclado normalmente no. El desarrollador del
control debe implementar el control para que actúe correctamente (se pueda arrastrar o
cambiar de tamaño).

En las secciones siguientes se definen la estructura de árbol, las propiedades, los


patrones de control y los eventos para el tipo de control Thumb de Automatización de
la interfaz de usuario necesarios. Los requisitos de Automatización de la interfaz de
usuario se aplican a todos los controles de posición, ya sea Windows Presentation
Foundation (WPF), Win32 o Windows Forms.
Estructura de árbol de Automatización de la
interfaz de usuario necesaria
En la tabla siguiente se describe la vista de control y la vista de contenido del árbol de
Automatización de la interfaz de usuario que pertenece a los controles de posición y se
describe lo que puede incluirse en cada vista. Para más información sobre el árbol de
Automatización de la interfaz de usuario, consulte Introducción al árbol de
Automatización de la interfaz de usuario.

Vista de control Vista de contenido

Thumb - No aplicable

Los controles de posición nunca aparecen en la vista de contenido porque solo existen
para que se manipulen con un mouse. Su funcionalidad se expone mediante otro patrón
de control, como el patrón Scroll, el patrón Transform o el patrón RangeValue, que se
admita en el contenedor Thumb.

Propiedades de Automatización de la interfaz


de usuario necesarias
En la tabla siguiente se muestran las propiedades de Automatización de la interfaz de
usuario cuyo valor o definición es especialmente relevante para los controles de
posición. Para más información sobre las propiedades de Automatización de la interfaz
de usuario, consulte Propiedades de Automatización de la interfaz de usuario:
Propiedades para clientes.

Propiedad de Valor Notas


automatización de interfaz
de usuario

AutomationIdProperty Vea las El valor de esta propiedad debe ser único en todos
notas. los controles de una aplicación.

BoundingRectangleProperty Vea las El rectángulo exterior que contiene el control


notas. completo.

ClickablePointProperty Vea las Cualquier punto dentro del área de cliente visible del
notas. control Thumb.

IsKeyboardFocusableProperty Vea las Si el control puede recibir el foco del teclado, debe
notas. admitir esta propiedad.
Propiedad de Valor Notas
automatización de interfaz
de usuario

NameProperty Null El control Thumb no está disponible en la vista de


contenido del árbol de Automatización de la interfaz
de usuario, por lo que no requiere un nombre.

LabeledByProperty Null Los controles Thumb nunca tienen una etiqueta.

ControlTypeProperty Thumb Este valor es el mismo para todos los marcos de


trabajo de la interfaz de usuario.

LocalizedControlTypeProperty "control" Cadena localizada que corresponde al tipo de control


Thumb.

IsContentElementProperty False El control Thumb nunca es contenido.

IsControlElementProperty True El control Thumb siempre debe ser un control.

Patrones de control de Automatización de la


interfaz de usuario necesarios
En la tabla siguiente se muestran los patrones de control de Automatización de la
interfaz de usuario requeridos para ser admitidos por los controles de posición. Para
más información sobre los patrones de control, vea UI Automation Control Patterns
Overview.

Patrón de control/Propiedad Soporte Notas


de patrón técnico/valor

ITransformProvider Obligatorio Permite que el control de posición se mueva


por la pantalla.

Eventos de Automatización de la interfaz de


usuario necesarios
En la tabla siguiente se muestran los eventos de UI Automation que se deben admitir
por parte de todos los controles de posición. Para más información sobre eventos, vea
UI Automation Events Overview.

Evento de Automatización de la interfaz de usuario Soporte técnico Notas

Evento cambiado por propiedadBoundingRectangleProperty . Obligatorio None


Evento de Automatización de la interfaz de usuario Soporte técnico Notas

Evento cambiado por propiedadIsOffscreenProperty . Obligatorio None

Evento cambiado por propiedadIsEnabledProperty . Obligatorio None

AutomationFocusChangedEvent Obligatorio None

StructureChangedEvent Obligatorio None

Consulte también
Thumb
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de UI Automation para
el tipo de control TitleBar
Artículo • 10/05/2023

7 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 ofrece información sobre la compatibilidad de Automatización de la


interfaz de usuario con el tipo de control TitleBar. En Automatización de la interfaz de
usuario, un tipo de control es un conjunto de condiciones que un control debe cumplir
para poder usar la propiedad ControlTypeProperty. Las condiciones incluyen directrices
específicas para la estructura de árbol de Automatización de la interfaz de usuario, los
valores de propiedad de Automatización de la interfaz de usuario y los patrones de
control.

Los controles de barra de título representan títulos o barras de título de una ventana.

En las secciones siguientes se definen la estructura de árbol de Automatización de la


interfaz de usuario, las propiedades, los patrones de control y los eventos necesarios
para el tipo de control TitleBar. Los requisitos de Automatización de la interfaz de
usuario se aplican a todos los controles de barra de título, ya sea Windows Presentation
Foundation (WPF), Win32 o Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
En la tabla siguiente se describe la vista de control y la vista de contenido del árbol de
Automatización de la interfaz de usuario que pertenece a los controles de barra de título
y se describe lo que puede incluirse en cada vista. Para más información sobre el árbol
de Automatización de la interfaz de usuario, vea Información general del árbol de
Automatización de la interfaz de usuario.

Vista de control Vista de contenido


Vista de control Vista de contenido

TitleBar No aplicable. (el control de barra de título no tiene contenido.)

- Menú (0 o 1)
- Botón (0 o más)

Propiedades de Automatización de la interfaz


de usuario necesarias
En la tabla siguiente se muestran las propiedades de Automatización de la interfaz de
usuario cuyo valor o definición es especialmente relevante para los controles TitleBar.
Para más información sobre las propiedades de Automatización de la interfaz de
usuario, vea Propiedades de Automatización de la interfaz de usuario para clientes.

Propiedad de Valor Notas


automatización de interfaz
de usuario

AutomationIdProperty Vea las El valor de esta propiedad debe ser único en todos
notas. los controles de una aplicación.

BoundingRectangleProperty Vea las El rectángulo delimitador de una barra de título debe


notas. abarcar todos los controles que incluye.

ClickablePointProperty Vea las Se admite si hay un rectángulo delimitador. Si no


notas. todos los puntos que se encuentran dentro del
rectángulo delimitador son seleccionables, y realiza
pruebas de aciertos especializadas, invalide y ofrezca
un punto en el que hacer clic.

IsKeyboardFocusableProperty False Las barras de título nunca tienen enfoque de teclado.

NameProperty "" La barra de título no es contenido; su información de


texto se expone en la ventana primaria.

LabeledByProperty Vea las Normalmente, el control de barra de título no tiene


notas. una etiqueta.

ControlTypeProperty TitleBar Este valor es el mismo para todos los marcos de


trabajo de la interfaz de usuario.

LocalizedControlTypeProperty "barra Cadena localizada que corresponde al tipo de control


de TitleBar.
título"

IsContentElementProperty False El control de barra de título nunca es contenido.


Propiedad de Valor Notas
automatización de interfaz
de usuario

IsControlElementProperty True El control de barra de título siempre debe ser un


control.

IsOffscreenProperty Depende Este control devolverá un valor dependiendo de si la


barra de título está visible en la pantalla.

HelpTextProperty "" No es necesario exponer el texto de ayuda.

AcceleratorKeyProperty "" Las barras de título nunca tienen teclas de


aceleración.

AccessKeyProperty "" El control de barra de título no tiene una clave de


acceso.

Patrones de control de Automatización de la


interfaz de usuario necesarios
El tipo de control TitleBar no debe admitir ningún patrón de control. Su funcionalidad se
expone a través del patrón de control Window en el control Window.

Eventos de Automatización de la interfaz de


usuario necesarios
En la tabla siguiente se muestran los eventos de Automatización de la interfaz de
usuario que se deben admitir por parte de todos los controles de barra de título. Para
más información sobre eventos, vea UI Automation Events Overview.

Evento de Automatización de la interfaz de usuario Soporte técnico Notas

Evento cambiado por propiedadBoundingRectangleProperty . Obligatorio None

Evento cambiado por propiedadIsOffscreenProperty . Obligatorio None

Evento cambiado por propiedadIsEnabledProperty . Nunca None

AutomationFocusChangedEvent Nunca None

StructureChangedEvent Obligatorio None

Consulte también
TitleBar
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de UI Automation para
el tipo de control ToolBar
Artículo • 09/05/2023

7 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.

Este tema proporciona información sobre la compatibilidad de UI Automation con el


tipo de control de la barra de herramientas. En UI Automation, un tipo de control es un
conjunto de condiciones que un control debe cumplir para poder usar la propiedad
ControlTypeProperty. Las condiciones incluyen directrices específicas para la estructura
de árbol de UI Automation , los valores de propiedad de esta y los patrones de control.
Los controles de barra de herramientas permiten a los usuarios activar comandos y
herramientas incluidos en una aplicación.

En las secciones siguientes se definen la estructura de árbol de Automatización de la


interfaz de usuario, las propiedades, los patrones de control y los eventos necesarios
para el tipo de control de la barra de herramientas. Los requisitos de Automatización de
la interfaz de usuario se aplican a todos los controles de barra de herramientas, ya sea
Windows Presentation Foundation (WPF), Win32 o Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
En la tabla siguiente se describe la vista de control y la vista de contenido del árbol de
Automatización de la interfaz de usuario que pertenece a los controles de la barra de
herramienta y se describe lo que puede incluirse en cada vista. Para más información
sobre el árbol de automatización de la interfaz de usuario, consulte Introducción al árbol
de automatización de la interfaz de usuario.

Vista de control Vista de contenido


Vista de control Vista de contenido

ToolBar ToolBar

Varios controles (0 o más) Varios controles (0 o más)

Un control de barra de herramientas puede contener cualquier tipo de control dentro


de su subárbol. Más a menudo contienen botones, cuadros combinados y botones de
expansión.

Propiedades de Automatización de la interfaz


de usuario necesarias
En la tabla siguiente se muestran las propiedades de automatización de la interfaz de
usuario cuyo valor o definición es especialmente relevante para los controles de la barra
de herramientas. Para más información sobre las propiedades de UI Automation,
consulte Propiedades de UI Automation: Propiedades para clientes.

Propiedad de Valor Notas


automatización de interfaz
de usuario

AutomationIdProperty Vea las notas. El valor de esta propiedad debe ser único en
todos los controles de una aplicación.

BoundingRectangleProperty Vea las notas. El rectángulo exterior que contiene el control


completo.

ClickablePointProperty Vea las notas. Se admite si hay un rectángulo delimitador. Si


no todos los puntos que se encuentran dentro
del rectángulo delimitador son seleccionables, y
realiza pruebas de aciertos especializadas,
invalide y ofrezca un punto en el que hacer clic.

IsKeyboardFocusableProperty Vea las notas. Si el control puede recibir el foco del teclado,
debe admitir esta propiedad.

NameProperty Depende El control de barra de herramientas no necesita


un nombre a menos que se use más de uno
dentro de una aplicación. Si hay más de uno,
cada uno debe tener un nombre distintivo (por
ejemplo, Formato o Esquematización).

LabeledByProperty Null Los controles de barra de herramientas nunca


tienen una etiqueta.
Propiedad de Valor Notas
automatización de interfaz
de usuario

ControlTypeProperty ToolBar Este valor es el mismo para todos los marcos de


trabajo de la interfaz de usuario.

LocalizedControlTypeProperty "barra de Cadena localizada que corresponde al tipo de


herramientas" control ToolBar.

IsContentElementProperty True El control de barra de herramientas siempre es


contenido.

IsControlElementProperty True El control de barra de herramientas siempre


debe ser un control.

Patrones de control de Automatización de la


interfaz de usuario necesarios
En la tabla siguiente se muestran los patrones de control de Automatización de la
interfaz de usuario requeridos para ser admitidos por los controles de la barra de
herramientas. Para más información sobre los patrones de control, vea UI Automation
Control Patterns Overview.

Patrón de control Soporte Notas


técnico

ExpandCollapsePattern Depende Si la barra de herramientas se puede expandir y contraer


para mostrar más elementos, debe admitir este patrón.

DockPattern Depende Si la barra de herramientas se puede acoplar a diferentes


partes de la pantalla, debe admitir este patrón.

TransformPattern Depende Si la barra de herramientas se puede cambiar de tamaño,


girar o mover, debe admitir este patrón.

Eventos de Automatización de la interfaz de


usuario necesarios
En la tabla siguiente se muestran los eventos de automatización de la interfaz de
usuario que deben admitir todos los controles de la barra de herramientas. Para más
información sobre los eventos, vea UI Automation Events Overview.
Evento de Automatización de la interfaz de usuario Soporte técnico Notas

Evento cambiado por propiedadBoundingRectangleProperty . Obligatorio None

Evento cambiado por propiedadIsOffscreenProperty . Obligatorio None

Evento cambiado por propiedadIsEnabledProperty . Obligatorio None

Evento cambiado por propiedadExpandCollapseStateProperty . Depende None

AutomationFocusChangedEvent Obligatorio None

StructureChangedEvent Obligatorio None

Consulte también
ToolBar
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de UI Automation para
el tipo de control ToolTip
Artículo • 10/05/2023

7 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 ofrece información sobre la compatibilidad de la automatización de la


interfaz de usuario con el tipo de control ToolTip. En la automatización de la interfaz de
usuario, un tipo de control es un conjunto de condiciones que un control debe cumplir
para poder usar la propiedad ControlTypeProperty. Las condiciones incluyen directrices
específicas para la estructura de árbol de la automatización de la interfaz de usuario, los
valores de propiedad de esta y los patrones de control.

Los controles de información sobre herramientas son ventanas emergentes que


contienen texto.

En las secciones siguientes se definen la estructura de árbol, las propiedades, los


patrones de control y los eventos para el tipo de control ToolTip de la automatización
de la interfaz de usuario necesarios. Los requisitos de la automatización de la interfaz de
usuario se aplican a todos los controles de información sobre las herramientas, ya sea
Windows Presentation Foundation (WPF), Win32 o Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
En la tabla siguiente se describe la vista de control y la vista de contenido del árbol de
Automatización de la interfaz de usuario que pertenece a los controles de información
sobre las herramientas y se describe lo que puede incluirse en cada vista. Para más
información sobre el árbol de automatización de la interfaz de usuario, consulte
Introducción al árbol de automatización de la interfaz de usuario.

Vista de control Vista de contenido


Vista de control Vista de contenido

Información sobre herramientas Información sobre herramientas

- Text (0 o más)
- Image (0 o más)

Los controles de información sobre herramientas solo aparecen en la vista de contenido


del árbol de automatización de la interfaz de usuario si pueden recibir el foco del
teclado. De lo contrario, todos los datos de la información sobre herramientas están
disponibles desde la propiedad HelpTextProperty del elemento de automatización de la
interfaz de usuario al que hace referencia la información sobre herramientas.

Los elementos de información sobre herramientas deben aparecer debajo del control al
que hace referencia su información. Los clientes deben estar a la escucha de
ToolTipOpenedEvent para asegurarse de que obtienen información de forma coherente

que está contenida en la información sobre herramientas.

Propiedades de Automatización de la interfaz


de usuario necesarias
En la tabla siguiente se muestran las propiedades de automatización de la interfaz de
usuario cuyo valor o definición es especialmente relevante para los controles de la
información sobre herramientas. Para más información sobre las propiedades de
automatización de la interfaz de usuario, consulte Propiedades de automatización de la
interfaz de usuario para clientes.

Propiedad de Valor Notas


automatización de interfaz
de usuario

AutomationIdProperty Vea las notas. El valor de esta propiedad debe ser único en
todos los controles de una aplicación.

BoundingRectangleProperty Vea las notas. El rectángulo exterior que contiene el control


completo.

ClickablePointProperty Vea las notas. El punto donde se puede hacer clic debe ser la
parte de la información sobre herramientas que
descartará el control. Algunos elementos de
información sobre herramientas no tienen esta
capacidad y no dispondrán de un punto donde
hacer clic.
Propiedad de Valor Notas
automatización de interfaz
de usuario

IsKeyboardFocusableProperty Vea las notas. Si el control puede recibir el foco del teclado,
debe admitir esta propiedad.

NameProperty Vea las notas. El nombre del control de información sobre


herramientas es el texto que se muestra en la
información sobre herramientas.

LabeledByProperty Null Los controles de información sobre herramientas


siempre se etiquetan automáticamente con su
contenido.

ControlTypeProperty Información Este valor es el mismo para todos los marcos de


sobre trabajo de la interfaz de usuario.
herramientas

LocalizedControlTypeProperty "información Cadena localizada que corresponde al tipo de


sobre control ToolTip.
herramientas"

IsContentElementProperty Depende Si el control de información sobre herramientas


puede recibir el foco del teclado, debe estar en
la vista de contenido del árbol. Si solo es texto,
está disponible como el elemento
HelpTextProperty del control que la generó.

IsControlElementProperty True El control de información sobre herramientas


siempre debe ser un control.

Patrones de control de Automatización de la


interfaz de usuario necesarios
En la tabla siguiente se muestran los patrones de control de Automatización de la
interfaz de usuario requeridos para ser admitidos por los controles de la información
sobre herramientas. Para más información sobre los patrones de control, vea UI
Automation Control Patterns Overview.

Patrón de Soporte Notas


control técnico

IWindowProvider Depende Los elementos de información sobre herramientas que se pueden


cerrar haciendo clic en un elemento de la interfaz de usuario
deben admitir WindowPattern para que se puedan cerrar
automáticamente.
Patrón de Soporte Notas
control técnico

ITextProvider Depende Para mejorar la accesibilidad, un control de información sobre


herramientas puede admitir el patrón de control Text, aunque no
es necesario. El patrón de control Text es útil cuando el texto tiene
atributos y estilo enriquecidos (por ejemplo, color, negrita y
cursiva).

Eventos de Automatización de la interfaz de


usuario necesarios
Los controles de información sobre herramientas deben generar el evento
ToolTipOpenedEvent cuando aparecen en la pantalla. El evento incluirá una referencia al

elemento de automatización de la interfaz de usuario de la propia información sobre


herramientas.

En la tabla siguiente se muestran los eventos de automatización de la interfaz de


usuario que deben admitir todos los controles de información sobre herramientas. Para
más información sobre eventos, vea UI Automation Events Overview.

Evento de Automatización de la interfaz de usuario Soporte técnico Notas

TextSelectionChangedEvent Depende None

TextChangedEvent Depende None

WindowClosedEvent Depende None

WindowOpenedEvent Depende None

ToolTipOpenedEvent Obligatorio None

ToolTipClosedEvent Obligatorio None

Evento cambiado por propiedadBoundingRectangleProperty . Obligatorio None

Evento cambiado por propiedadIsOffscreenProperty . Obligatorio None

Evento cambiado por propiedadIsEnabledProperty . Obligatorio None

Evento cambiado por propiedadNameProperty . Obligatorio None

Evento cambiado por propiedadWindowVisualStateProperty . Depende None

AutomationFocusChangedEvent Obligatorio None


Evento de Automatización de la interfaz de usuario Soporte técnico Notas

StructureChangedEvent Obligatorio None

Consulte también
ToolTip
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de UI Automation para
el tipo de control Tree
Artículo • 09/05/2023

7 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.

Este tema proporciona información sobre la compatibilidad de la UI Automation con el


tipo de control árbol. En UI Automation, un tipo de control es un conjunto de
condiciones que un control debe cumplir para poder usar la propiedad
ControlTypeProperty. Las condiciones incluyen directrices específicas para la estructura
de árbol de Automatización de la interfaz de usuario, los valores de propiedad de
Automatización de la interfaz de usuario y los patrones de control.

El tipo de control Tres se usa para contenedores cuyo contenido tiene relevancia como
una jerarquía de nodos, como con la manera en que se muestran archivos y carpetas en
el panel izquierdo de Microsoft Windows Explorer. Cada nodo tiene el potencial de
contener otros nodos, denominados nodos secundarios. Los nodos primarios o los
nodos que contienen nodos secundarios se pueden mostrar expandidos o contraídos.

En las secciones siguientes se definen la estructura de árbol, las propiedades, los


patrones de control y los eventos para el tipo de control de árbol de UI Automation
necesarios. Los requisitos de automatización de la interfaz de usuario se aplican a todos
los controles de árbol, ya sea Windows Presentation Foundation (WPF), Win32 o
Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
En la tabla siguiente se describe la vista de control y la vista de contenido del árbol de
UI Automation que pertenece a los controles de árbol y se describe lo que puede
incluirse en cada vista. Para más información sobre el árbol de automatización de la
interfaz de usuario, consulte Introducción al árbol de automatización de la interfaz de
usuario.

Vista de control Vista de contenido

Árbol Árbol

DataItem (0 o más) DataItem (0 o más)


TreeItem (0 o más) TreeItem (0 o más)

TreeItem (0 o más)• … TreeItem (0 o más)• …


ScrollBar (0, 1, 2)

La vista de control del árbol de UI Automation consta de:

Cero a muchos elementos dentro del contenedor (los elementos se pueden basar
en el elemento del árbol, el elemento de datos u otro tipo de control).

Cero, una o dos barras de desplazamiento.

La vista de contenido del árbol UI Automation consta de cero a muchos elementos


dentro del contenedor (los elementos se pueden basar en el elemento del árbol, el
elemento de datos u otro tipo de control).

Propiedades de Automatización de la interfaz


de usuario necesarias
En la tabla siguiente se muestran las propiedades de UI Automation cuyo valor o
definición es especialmente relevante para los controles de lista. Para más información
sobre las propiedades de automatización de la interfaz de usuario, consulte Propiedades
de automatización de la interfaz de usuario para clientes.

Propiedad de Valor Notas


automatización de interfaz
de usuario

AutomationIdProperty Vea las El valor de esta propiedad debe ser único en todos los
notas. controles de una aplicación.

BoundingRectangleProperty Vea las El rectángulo exterior que contiene el control completo.


notas.
Propiedad de Valor Notas
automatización de interfaz
de usuario

ClickablePointProperty Vea las Los controles Tree tienen un punto interactivo que hará
notas. que el árbol o a uno los elementos del contenedor del
árbol tenga el enfoque en ellos. Solo obtiene un punto
interactivo para un árbol si puede hacer clic en algún
lugar que no haga que uno de los elementos se
seleccione ni obtenga el enfoque.

ControlTypeProperty Árbol Este valor es el mismo para todos los marcos de trabajo
de la interfaz de usuario.

IsContentElementProperty True El control de árbol siempre se incluye en la vista de


contenido del árbol de automatización de la interfaz de
usuario.

IsControlElementProperty True El control de árbol siempre se incluye en la vista de


control del árbol de automatización de la interfaz de
usuario.

IsKeyboardFocusableProperty Vea las Si el control puede recibir el foco del teclado, debe
notas. admitir esta propiedad.

LabeledByProperty Vea las Si el control de árbol tiene una etiqueta asociada, esta
notas. propiedad devolverá un AutomationElement para esa
etiqueta. De lo contrario, la propiedad devolverá una
referencia nula ( Nothing en Microsoft Visual Basic .NET).

LocalizedControlTypeProperty "árbol" Cadena localizada que corresponde al tipo de control


List.

NameProperty Vea las El valor de la propiedad del nombre de un control de


notas. árbol normalmente procede del texto que etiqueta el
control. Si no hay ninguna etiqueta de texto, el
desarrollador de aplicaciones debe proporcionar un
valor para esta propiedad.

Patrones de control de Automatización de la


interfaz de usuario necesarios
En la tabla siguiente se muestran los patrones de control de Automatización de la
interfaz de usuario requeridos para ser admitidos por los controles de lista. Para más
información sobre los patrones de control, vea UI Automation Control Patterns
Overview.
Patrón de Soporte Notas
control/Propiedad técnico/valor
de patrón

ISelectionProvider Depende Los controles de árbol que contienen un conjunto de


elementos seleccionables deben implementar este patrón
de control. Este patrón de control no tiene que
implementarse si la selección de un elemento no transmite
información significativa al usuario.

CanSelectMultiple Vea las notas. Implemente esta propiedad si el control del árbol admite
selección múltiple (la mayoría de los controles de árbol
admiten selección múltiple).

IsSelectionRequired Vea las notas. El valor de esta propiedad se expone si el control requiere
que se seleccione un elemento.

IScrollProvider Depende Implemente este patrón de control si el contenido del


contenedor de árbol puede desplazarse.

Eventos de Automatización de la interfaz de


usuario necesarios
En la tabla siguiente se muestran los eventos de UI Automation que se deben admitir
por parte de todos los controles de árbol. Para más información sobre los eventos, vea
UI Automation Events Overview.

Evento de Automatización de la interfaz de usuario Soporte técnico Notas

InvalidatedEvent Depende None

Evento cambiado por propiedadBoundingRectangleProperty . Obligatorio None

Evento cambiado por propiedadIsOffscreenProperty . Obligatorio None

Evento cambiado por propiedadIsEnabledProperty . Obligatorio None

Evento cambiado por propiedadHorizontallyScrollableProperty . Depende None

Evento cambiado por propiedadHorizontalScrollPercentProperty . Depende None

Evento cambiado por propiedadHorizontalViewSizeProperty . Depende None

Evento cambiado por propiedadVerticalScrollPercentProperty . Depende None

Evento cambiado por propiedadVerticallyScrollableProperty . Depende None

Evento cambiado por propiedadVerticalViewSizeProperty . Depende None


Evento de Automatización de la interfaz de usuario Soporte técnico Notas

AutomationFocusChangedEvent Obligatorio None

StructureChangedEvent Obligatorio None

Consulte también
Tree
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de UI Automation para
el tipo de control TreeItem
Artículo • 09/05/2023

7 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 ofrece información sobre la compatibilidad de Automatización de la


interfaz de usuario con el tipo de control TreeItem. En Automatización de la interfaz de
usuario, un tipo de control es un conjunto de condiciones que un control debe cumplir
para poder usar la propiedad ControlTypeProperty. Las condiciones incluyen directrices
específicas para la estructura de árbol de Automatización de la interfaz de usuario, los
valores de propiedad de Automatización de la interfaz de usuario y los patrones de
control.

El tipo de control TreeItem representa un nodo dentro de un contenedor de árbol. Cada


nodo puede contener otros nodos, llamados nodos secundarios. Los nodos primarios o
los nodos que contienen nodos secundarios se pueden mostrar expandidos o
contraídos.

En las secciones siguientes se definen la estructura de árbol, las propiedades, los


patrones de control y los eventos para el tipo de control TreeItem de Automatización de
la interfaz de usuario necesarios. Los requisitos de Automatización de la interfaz de
usuario se aplican a todos los controles de elementos del árbol, ya sea Windows
Presentation Foundation (WPF), Win32 o Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
En la tabla siguiente se describe la vista de control y la vista de contenido del árbol de
Automatización de la interfaz de usuario que pertenece a los controles de elemento del
árbol y se describe lo que puede incluirse en cada vista. Para más información sobre el
árbol de Automatización de la interfaz de usuario, vea Información general del árbol de
Automatización de la interfaz de usuario.

Vista de control Vista de contenido

TreeItem TreeItem

- CheckBox (0 o 1) - TreeItem (0 o más)


- Image (0 o 1)
- Button (0 o 1)
- TreeItem (0 o más)

Los controles de elemento del árbol pueden tener cero o más elementos secundarios de
árbol en la vista de contenido del árbol de Automatización de la interfaz de usuario. Si el
control de elemento de árbol tiene una funcionalidad más allá de lo expuesto en los
patrones de control que se muestran a continuación, el control debe basarse en el tipo
de control Data Item.

Los elementos del árbol contraídos no se mostrarán en la vista de control ni en la vista


de contenido hasta que estén visibles y expandidos (o se pueden desplazar en la vista).

La vista de control puede contener detalles adicionales de un control, entre los que se
incluyen una imagen asociada o un botón. Por ejemplo, un elemento de una vista
Esquema podría contener una imagen, así como un botón para expandir o contraer el
esquema. Estos objetos de detalle no aparecen en la vista de contenido porque la
información ya está representada por el elemento de árbol primario. Los elementos de
árbol que se desplazan fuera de la pantalla aparecerán en las vistas de control y de
contenido del árbol de Automatización de la interfaz de usuario y deben tener
IsOffscreenProperty establecida en true.

Propiedades de Automatización de la interfaz


de usuario necesarias
En la tabla siguiente se muestran las propiedades de Automatización de la interfaz de
usuario cuyo valor o definición es especialmente relevante para los controles de lista.
Para más información sobre las propiedades de automatización de la interfaz de
usuario, vea Propiedades de Automatización de la interfaz de usuario Properties para
clientes.

Propiedad de Valor Notas


automatización de interfaz
de usuario
Propiedad de Valor Notas
automatización de interfaz
de usuario

AutomationIdProperty Vea las El valor de esta propiedad debe ser único en todos
notas. los controles de una aplicación.

BoundingRectangleProperty Vea las El rectángulo exterior que contiene el control


notas. completo.

ClickablePointProperty Vea las Esta propiedad debe devolver una ubicación del
notas. elemento que hará que el elemento cambie el
estado de selección u obtenga el foco.

ControlTypeProperty TreeItem Este valor es el mismo para todos los marcos de


trabajo de la interfaz de usuario.

IsContentElementProperty True El control de lista siempre se incluye en la vista de


contenido del árbol de Automatización de la interfaz
de usuario.

IsControlElementProperty True El control de lista siempre se incluye en la vista de


control del árbol de Automatización de la interfaz
de usuario.

IsOffscreenProperty Vea las Esta propiedad se establece para indicar cuando un


notas. control de elemento de árbol se desplaza fuera de la
pantalla.

IsKeyboardFocusableProperty Vea las Si el control puede recibir el foco del teclado, debe
notas. admitir esta propiedad.

ItemTypeProperty Vea las Si el control de elemento de árbol utiliza un icono


notas. visual para indicar que es un tipo de objeto
determinado, esta propiedad debe admitirse e
indicar cuál es el objeto.

LabeledByProperty Null Los controles de elemento de árbol se etiquetan


automáticamente.

LocalizedControlTypeProperty "elemento Cadena localizada que corresponde al tipo de


de árbol" control TreeItem.

NameProperty Vea las Esta propiedad expone el texto que se muestra para
notas. cada control de elemento de árbol.

Patrones de control de Automatización de la


interfaz de usuario necesarios
En la tabla siguiente se muestran los patrones de control de Automatización de la
interfaz de usuario requeridos para ser admitidos por los controles de lista. Para más
información sobre los patrones de control, vea UI Automation Control Patterns
Overview.

Patrón de Soporte Notas


control/Propiedad de técnico/valor
patrón

IInvokeProvider Depende Implemente este patrón de control si el elemento de


árbol tiene un comando independiente y accionable.

IExpandCollapseProvider Sí Todos los elementos del árbol se pueden expandir o


contraer.

ExpandCollapseState Expanded, Los elementos de árbol serán nodos hoja cuando no


Collapsed o se expandan ni contraigan.
Leaf Node

IScrollItemProvider Depende Implemente este patrón de control si el contenedor


de árbol admite el patrón de control Scroll.

ISelectionItemProvider Depende Implemente este patrón de control si es posible tener


una selección activa que se mantenga cuando el
usuario vuelva al contenedor de árbol.

SelectionContainer Sí Esta propiedad expondrá el mismo contenedor para


todos los elementos de dentro del contenedor.

IToggleProvider Depende Implemente este patrón de control si el elemento de


árbol tiene una casilla asociada.

Eventos de Automatización de la interfaz de


usuario necesarios
En la siguiente tabla se muestra los eventos de Automatización de la interfaz de usuario
requeridos para ser admitidos por todos los controles de elemento del árbol. Para más
información sobre eventos, vea UI Automation Events Overview.

Evento de Automatización de la interfaz de usuario Soporte técnico Notas

AutomationFocusChangedEvent Obligatorio None

Evento cambiado por propiedadBoundingRectangleProperty . Obligatorio None

Evento cambiado por propiedadIsEnabledProperty . Obligatorio None


Evento de Automatización de la interfaz de usuario Soporte técnico Notas

Evento cambiado por propiedadIsOffscreenProperty . Obligatorio None

Evento cambiado por propiedadItemStatusProperty . Depende None

Evento cambiado por propiedadNameProperty . Obligatorio None

StructureChangedEvent Obligatorio None

Evento cambiado por propiedadExpandCollapseStateProperty . Obligatorio None

InvokedEvent Depende None

Evento cambiado por propiedadCurrentViewProperty . Depende None

ElementAddedToSelectionEvent Depende None

ElementRemovedFromSelectionEvent Depende None

ElementSelectedEvent Depende None

Evento cambiado por propiedadToggleStateProperty . Depende None

Evento cambiado por propiedadValueProperty . Depende None

Consulte también
TreeItem
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation
Compatibilidad de UI Automation para
el tipo de control Window
Artículo • 10/05/2023

7 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 ofrece información sobre la compatibilidad de Automatización de la


interfaz de usuario con el tipo de control Window. En Automatización de la interfaz de
usuario, un tipo de control es un conjunto de condiciones que un control debe cumplir
para poder usar la propiedad ControlTypeProperty. Las condiciones incluyen directrices
específicas para la estructura de árbol de Automatización de la interfaz de usuario, los
valores de propiedad de Automatización de la interfaz de usuario y los patrones de
control.

El control de ventana consta del marco de la ventana, que contiene objetos secundarios
como la barra de título, el cliente y otros objetos.

Los requisitos de Automatización de la interfaz de usuario de las secciones siguientes se


aplican a todos los controles que implementan el tipo de control Window, ya sea
Windows Presentation Foundation (WPF), Win32 o Windows Forms.

Estructura de árbol de Automatización de la


interfaz de usuario necesaria
En la tabla siguiente se describe la vista de control y la vista de contenido del árbol de
Automatización de la interfaz de usuario que pertenece a los controles de ventana y se
describe lo que puede incluirse en cada vista. Para más información sobre el árbol de
Automatización de la interfaz de usuario, consulte Introducción al árbol de
Automatización de la interfaz de usuario.

Vista de control Vista de contenido

Periodo Periodo
Propiedades de Automatización de la interfaz
de usuario necesarias
En la tabla siguiente se muestran las propiedades de Automatización de la interfaz de
usuario cuyo valor o definición es especialmente relevante para los controles de
ventana. Para más información sobre las propiedades de Automatización de la interfaz
de usuario, consulte Propiedades de Automatización de la interfaz de usuario para
clientes.

Propiedad de Valor Notas


automatización de interfaz
de usuario

AutomationIdProperty Vea las El valor de esta propiedad debe ser único en todos
notas. los controles de una aplicación.

BoundingRectangleProperty Vea las El rectángulo exterior que contiene el control


notas. completo.

ClickablePointProperty Vea las El control de ventana debe tener un punto en el que


notas. se pueda hacer clic que hará que se seleccione o se
deseleccione la ventana.

ControlTypeProperty Periodo Este valor es el mismo para todos los marcos de


trabajo de la interfaz de usuario.

IsContentElementProperty True El control de ventana siempre debe ser contenido.

IsControlElementProperty True El control de ventana siempre debe ser un control.

IsKeyboardFocusableProperty Vea las Si el control puede recibir el foco del teclado, debe
notas. admitir esta propiedad.

LabeledByProperty null Los controles de ventana no tienen una etiqueta


Window estática.

LocalizedControlTypeProperty "ventana" Cadena localizada que corresponde al tipo de


control Window.

NameProperty Vea las El control de ventana siempre contiene un elemento


notas. Window principal que está relacionado con lo que el
usuario asociaría como el identificador más
semántico para el elemento.

Patrones de control de Automatización de la


interfaz de usuario necesarios
En la tabla siguiente se muestran los patrones de control de Automatización de la
interfaz de usuario requeridos para ser admitidos por los controles de ventana. Para más
información sobre los patrones de control, vea UI Automation Control Patterns
Overview.

Patrón de control Soporte Notas


técnico

IDockProvider Condicional Se debe admitir si la ventana tiene la capacidad de


acoplarse.

ITransformProvider Obligatorio Permite que la ventana se mueva, cambie de tamaño o gire


en la pantalla.

IWindowProvider Obligatorio Habilita operaciones específicas para la ventana.

Eventos de Automatización de la interfaz de


usuario necesarios
En la tabla siguiente se muestran los eventos de UI Automation que se deben admitir
por parte de todos los controles de ventana. Para más información sobre eventos, vea UI
Automation Events Overview.

Evento de Automatización de la interfaz de usuario Soporte técnico Notas

AsyncContentLoadedEvent Obligatorio None

AutomationFocusChangedEvent Obligatorio None

Evento cambiado por propiedadBoundingRectangleProperty . Obligatorio None

Evento cambiado por propiedadIsEnabledProperty . Obligatorio None

Evento cambiado por propiedadIsOffscreenProperty . Obligatorio None

LayoutInvalidatedEvent Obligatorio None

Evento cambiado por propiedadNameProperty . Obligatorio None

StructureChangedEvent Obligatorio None

Evento cambiado por propiedadHorizontallyScrollableProperty . Depende None

Evento cambiado por propiedadHorizontalScrollPercentProperty . Depende None

Evento cambiado por propiedadHorizontalViewSizeProperty . Depende None

Evento cambiado por propiedadVerticalScrollPercentProperty . Depende None


Evento de Automatización de la interfaz de usuario Soporte técnico Notas

Evento cambiado por propiedadVerticallyScrollableProperty . Depende None

Evento cambiado por propiedadVerticalViewSizeProperty . Depende None

WindowClosedEvent Obligatorio None

WindowOpenedEvent Obligatorio None

Evento cambiado por propiedadWindowVisualStateProperty . Depende None

Consulte también
Window
Información general sobre tipos de control de UI Automation
Información general sobre UI Automation

También podría gustarte