Diseño de propiedades, eventos y patrones de control personalizados

El diseño de una propiedad personalizada, un evento o un patrón de control debe ser útil en una amplia variedad de implementaciones de control. Los diseños específicos de la aplicación o de control que solo son útiles en escenarios limitados deben evitarse. El diseño debe seguir el ejemplo de las propiedades, eventos y patrones de control existentes de Microsoft Automatización de la interfaz de usuario, que se especificaron cuidadosamente para satisfacer las necesidades de una amplia variedad de aplicaciones de pruebas automatizadas y de accesibilidad.

La implementación de la especificación de un patrón de propiedad, evento o control personalizado implica la cooperación y el acuerdo de partes en los lados del cliente y del proveedor, y requiere que ambas partes implementen la especificación de forma coherente. Se recomienda a las empresas que trabajen con organizaciones del sector como accessibility Interoperability Alliance (AIA) para diseñar y publicar la especificación para la propiedad personalizada, el evento o el patrón de control. De esta manera, se puede alcanzar el consenso y se puede garantizar la interoperabilidad con la mayor variedad de aplicaciones.

Este tema contiene las siguientes secciones:

Cuándo usar eventos y propiedades personalizados

Antes de crear una propiedad personalizada, un evento o un patrón de control, asegúrese de que Automatización de la interfaz de usuario no proporciona una solución existente. Por ejemplo, no es necesario crear un patrón de control personalizado "Clic" porque el patrón de control Invoke ya describe esa funcionalidad.

Si decide que se necesita una propiedad personalizada, un evento o un patrón de control, asegúrese de que no es demasiado impreciso o genérico. Por ejemplo, un patrón de control denominado "Mostrar" no es útil porque la visibilidad de un control se puede indicar mediante una propiedad de disponibilidad en el elemento, como UIA_IsExpandCollapsePatternAvailablePropertyId o UIA_IsScrollItemPatternAvailablePropertyId.

Antes de implementar una solución personalizada, confirme cuidadosamente que es necesaria y, a continuación, diseñe completamente la funcionalidad.

Diseño de propiedades personalizadas

Automatización de la interfaz de usuario incluye dos tipos básicos de propiedades: propiedades de elementos de automatización y propiedades de patrón de control. Las propiedades del elemento de automatización constan de un conjunto común de propiedades, como Name, AcceleratorKey y ClassName, expuestos por todos los elementos Automatización de la interfaz de usuario, independientemente del tipo de control. Las propiedades del patrón de control se exponen mediante un control a través de un patrón de control determinado. Cada patrón de control tiene un conjunto correspondiente de propiedades de patrón de control que el control debe exponer. Por ejemplo, un control que admite el patrón de control Grid expone las propiedades ColumnCount y RowCount.

Una propiedad de elemento de automatización personalizada o propiedad de patrón de control debe cumplir las siguientes directrices de diseño:

  • Una propiedad personalizada debe tener uno de los siguientes tipos de datos especificados por la enumeración UIAutomationType . No se admite ningún otro tipo de datos para las propiedades personalizadas.
    • UIAutomationType_Bool
    • UIAutomationType_Double
    • UIAutomationType_Element
    • UIAutomationType_Int
    • UIAutomationType_Point
    • UIAutomationType_String
  • Si la propiedad personalizada contiene datos de cadena (BSTR), la especificación debe indicar si la propiedad es localizable (es decir, si la cadena se puede traducir a distintos idiomas de la interfaz de usuario).
  • La propiedad personalizada no debe superponerse con las características o la funcionalidad de las propiedades existentes.

Diseño de eventos personalizados

Las aplicaciones usan Automatización de la interfaz de usuario notificaciones de eventos para responder a los cambios y acciones que implican elementos de la interfaz de usuario. La mayoría de las propiedades tienen eventos de cambio de propiedad asociados que Automatización de la interfaz de usuario generan cuando cambia el valor de la propiedad. Si introduce una propiedad personalizada, debe considerar la posibilidad de introducir los eventos personalizados correspondientes que también puedan ser necesarios.

Un evento personalizado debe cumplir las siguientes directrices de diseño:

  • El evento personalizado debe ser "sin estado". No se puede asociar a una propiedad o un valor específicos.
  • El evento personalizado no debe superponerse con la definición o el rol de ningún evento existente.

Eventos de Automatización de la interfaz de usuario personalizados y WinEvents

WinEvents son un mecanismo útil de comunicación entre procesos y eventos en la plataforma Microsoft Windows. Sin embargo, la introducción de un nuevo id. de WinEvent es arriesgada porque puede provocar colisiones con otras aplicaciones o el sistema operativo, lo que hace que el sistema se vuelva inestable. Para evitar colisiones, Microsoft ha definido varias categorías diferentes de WinEvents y, para cada categoría, ha definido uno o varios intervalos de valores para su uso como identificadores de WinEvent. Para obtener más información, vea Asignación de identificadores de WinEvent.

Los eventos de Automatización de la interfaz de usuario personalizados evitan conflictos asignando el identificador de evento internamente en el marco de Automatización de la interfaz de usuario.

Diseño de patrones de control personalizados

Un patrón de control es una interfaz con propiedades, métodos y eventos que definen una parte discreta de la funcionalidad disponible desde un elemento de automatización. Los métodos de patrón de control permiten a los clientes Automatización de la interfaz de usuario manipular un aspecto determinado del control. Las propiedades y eventos del patrón de control proporcionan información sobre algún aspecto del control y proporcionan información sobre el estado del elemento de automatización que implementa el patrón de control.

Un patrón de control personalizado debe cumplir las siguientes directrices de diseño:

  • Un patrón de control personalizado debe abarcar un escenario determinado. Por ejemplo, el patrón de control ItemContainer está pensado para consultar un objeto contenido independientemente del estado de virtualización, pero no enumera ni cuenta los objetos contenidos.
  • Un patrón de control personalizado no debe superponerse con las características de los patrones de control existentes. Por ejemplo, los patrones de control Invoke y ExpandCollapse no deben combinarse y presentarse como un nuevo patrón de control. Reutilice los patrones de control existentes o defina escenarios únicos con nuevos patrones de control.
  • Se pueden diseñar varios patrones de control personalizados juntos para admitir escenarios complejos. Por ejemplo, los patrones de control Selection y SelectionItem funcionan conjuntamente para admitir escenarios generales de selección de objetos.

Tipos de control personalizados

Aunque este tema se centra en cómo registrar propiedades, eventos y patrones de control personalizados de Automatización de la interfaz de usuario, también es posible introducir nuevos tipos de control. A diferencia de las propiedades, eventos y patrones de control personalizados, un tipo de control personalizado no se puede registrar mediante programación en tiempo de ejecución porque realmente es simplemente un valor potencial de la propiedad Automatización de la interfaz de usuario ControlType. Sin embargo, se puede definir, publicar y poner a disposición de otros clientes y proveedores un identificador de tipo de control personalizado. Para obtener más información sobre los tipos de control, vea Automatización de la interfaz de usuario Información general sobre los tipos de control.

Conceptual

Registro de propiedades personalizadas, eventos y patrones de control

Información general acerca de las propiedades de UI Automation

Información general sobre eventos de UI Automation

Información general acerca de los patrones de control de UI Automation