Compartir a través de


Diseñar 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 Automatización de la interfaz de usuario de Microsoft, 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 para una propiedad personalizada, evento o patrón de control 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 el Accessibility Interoperability Alliance (AIA) diseñar y publicar la especificación para el patrón de propiedad, evento o control personalizados. De esta manera, se puede alcanzar el consenso y se puede garantizar la interoperabilidad con la mayor variedad de aplicaciones.

Este tema contiene las secciones siguientes:

Cuándo usar propiedades y eventos personalizados

Antes de crear una propiedad personalizada, un evento o un patrón de control, asegúrese de que la 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 "Click" 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 puede indicarse 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

La 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, que se exponen en todos los elementos de 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 de 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 diferentes 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 notificaciones de eventos de Automatización de la interfaz de usuario para responder a 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 la automatización de la interfaz de usuario genera 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 valor específico.
  • El evento personalizado no debe superponerse con la definición o el rol de ningún evento existente.

Eventos personalizados de automatización de la interfaz de usuario 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 da lugar a 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 WinEvent. Para obtener más información, vea Asignación de identificadores winEvent.

Los eventos personalizados de Automatización de la interfaz de usuario 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 de 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 cubrir un escenario determinado. Por ejemplo, el patrón de control ItemContainer está diseñado 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 ni presentarse como un nuevo patrón de control. Puede reutilizar los patrones de control existentes o definir escenarios únicos con nuevos patrones de control.
  • Se pueden diseñar varios patrones de control personalizados para admitir escenarios complejos. Por ejemplo, los patrones de control selection y SelectionItem funcionan juntos 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 ControlType de automatización de la interfaz de usuario. 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, consulte ui Automation Control Types Overview.

conceptual de

registrar propiedades personalizadas, eventos y patrones de control

de propiedades de automatización de la interfaz de usuario de

Información general de eventos de automatización de la interfaz de usuario de

Introducción a los patrones de control de automatización de la interfaz de usuario de