Novedades de accesibilidad en .NET Framework

.NET Framework aspira a que las aplicaciones sean más accesibles para los usuarios. Las características de accesibilidad permiten que una aplicación proporcione una experiencia adecuada para los usuarios de la tecnología de asistencia. A partir de .NET Framework 4.7.1, .NET Framework incluye muchas mejoras de accesibilidad que permiten a los desarrolladores crear aplicaciones accesibles.

Modificadores de accesibilidad

Puede configurar la aplicación para que opte por recibir características de accesibilidad si su destino es .NET Framework 4.7 o una versión anterior, pero se ejecuta en .NET Framework 4.7.1 o una versión posterior. También la puede configurar para que use características heredadas (en vez de aprovechar las ventajas de las características de accesibilidad) si su destino es .NET Framework 4.7.1 o una versión posterior. Cada versión de .NET Framework que incluye características de accesibilidad cuenta con un modificador de accesibilidad específico de la versión correspondiente, que se agrega al elemento <AppContextSwitchOverrides> en la sección <runtime> del archivo de configuración de la aplicación. Estos son los modificadores admitidos:

Versión Modificador
.NET Framework 4.7.1 "Switch.UseLegacyAccessibilityFeatures"
.NET Framework 4.7.2 "Switch.UseLegacyAccessibilityFeatures.2"
.NET Framework 4.8 "Switch.UseLegacyAccessibilityFeatures.3"
11 de agosto de 2020: actualización acumulativa KB4569746 para .NET Framework 4.8 "Switch.UseLegacyAccessibilityFeatures.4"

Aprovechar las mejoras de accesibilidad

Las nuevas características de accesibilidad están habilitadas de forma predeterminada para las aplicaciones para .NET Framework 4.7.1 o posterior. Además, las aplicaciones para versiones anteriores de .NET Framework que se ejecutan en .NET Framework 4.7.1 o posterior pueden optar por no recibir comportamientos de accesibilidad heredados (y, por tanto, usar las mejoras de accesibilidad correspondientes) si se agregan modificadores al elemento <AppContextSwitchOverrides> de la sección <runtime> del archivo de configuración de la aplicación y sus valores se establecen en false. En el fragmento de código siguiente se muestra cómo obtener acceso a las mejoras de accesibilidad que se incluyeron en .NET Framework 4.7.1:

<runtime>
    <!-- AppContextSwitchOverrides value attribute is in the form of key1=true|false;key2=true|false  -->
    <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false" />
</runtime>

Si decide disponer de las características de accesibilidad en una versión posterior de .NET Framework, deberá optar por recibir también las características de versiones anteriores. Para configurar la aplicación para aprovechar las mejoras de accesibilidad en .NET Framework 4.7.1 y 4.7.2, agregue el siguiente <AppContextSwitchOverrides> elemento:

<runtime>
    <!-- AppContextSwitchOverrides value attribute is in the form of key1=true|false;key2=true|false  -->
    <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false" />
</runtime>

Para configurar la aplicación con el fin de aprovechar las mejoras de accesibilidad en .NET Framework 4.7.1, 4.7.2, 4.8 y la actualización acumulativa de agosto de 2020 de .NET Framework 4.8, agregue el siguiente elemento <AppContextSwitchOverrides>:

<runtime>
    <!-- AppContextSwitchOverrides value attribute is in the form of key1=true|false;key2=true|false  -->
    <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false;Switch.UseLegacyAccessibilityFeatures.3=false;Switch.UseLegacyAccessibilityFeatures.4=false"/>
</runtime>

Restaurar el comportamiento heredado

Las aplicaciones que tienen como destino versiones de .NET Framework a partir de la 4.7.1 permiten deshabilitar las características de accesibilidad. Para ello, hay que agregar modificadores al elemento <AppContextSwitchOverrides> en la sección <runtime> del archivo de configuración de la aplicación y establecer sus valores en true. Por ejemplo, la siguiente configuración opta por no recibir las características de accesibilidad incluidas en .NET Framework 4.7.2:

<runtime>
    <!-- AppContextSwitchOverrides value attribute is in the form of key1=true|false;key2=true|false  -->
    <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures.2=true" />
</runtime>

Novedades de accesibilidad en la actualización acumulativa del 11 de agosto de 2020 para .NET Framework 4.8

La actualización acumulativa del 11 de agosto de 2020 (KB4569746) para .NET Framework 4.8 incluye nuevas características de accesibilidad en Windows Forms:

  • Soluciona un problema con el anuncio por parte de lectores de pantalla de los elementos de control PropertyGrid, así como el estado expandido o contraído de una categoría.

  • Actualiza los patrones accesibles del control PropertyGrid y sus elementos internos.

  • Actualiza los nombres accesibles de los elementos internos del control PropertyGrid para que los lectores de pantalla los anuncien correctamente.

  • Aborda las propiedades accesibles de los rectángulos delimitadores para los controles PropertyGridView.

  • Permite a los lectores de pantalla anunciar correctamente el estado expandido o contraído de las celdas de cuadro combinado de DataGridView.

Novedades de accesibilidad en .NET Framework 4.8

.NET Framework 4.8 incluye nuevas características de accesibilidad en las siguientes áreas:

Windows Forms

En .NET Framework 4.8, Windows Forms agrega compatibilidad con las regiones activas y eventos de notificación para muchos controles usados frecuentemente. También agrega compatibilidad con informaciones sobre herramientas cuando un usuario se desplaza a un control mediante el teclado.

Compatibilidad con las regiones activas de UIA en las etiquetas y StatusStrips

Las regiones activas de UIA permiten a los desarrolladores de aplicaciones notificar a los lectores de pantalla un cambio de texto en un control que se encuentra fuera de la ubicación donde el usuario está trabajando. Esto resulta útil, por ejemplo, para un control StatusStrip que muestra un estado de conexión. Si se interrumpe la conexión y cambia el estado, el desarrollador tal vez desee notificarlo al lector de pantalla.

A partir de .NET Framework 4.8, Windows Forms implementa las regiones activas de UIA para ambos controles Label y StatusStrip. Por ejemplo, el código siguiente usa la región activa en un control Label denominado label1:

public Form1()
{
   InitializeComponent();
   label1.AutomationLiveSetting = AutomationLiveSetting.Polite;
}

…
Label1.Text = “Ready!”;

Narrador anuncia “Listo”, independientemente de dónde esté interactuando el usuario con la aplicación.

También puede implementar su UserControl como una región activa:

using System;
using System.Windows.Forms;
using System.Windows.Forms.Automation;

namespace WindowsFormsApplication
{
   public partial class UserControl1 : UserControl, IAutomationLiveRegion
   {
      public UserControl1()
      {
         InitializeComponent();
      }

      public AutomationLiveSetting AutomationLiveSetting { get; set; }
      private AutomationLiveSetting IAutomationLiveRegion.GetLiveSetting()
      {
         return this.AutomationLiveSetting;
      }

      protected override void OnTextChanged(EventArgs e)
      {
         base.OnTextChanged(e);
         AutomationNotifications.UiaRaiseLiveRegionChangedEvent(this.AccessibilityObject);
      }
   }
}

Eventos de notificación de UIA

El evento de notificación de UIA, introducido en Windows 10 Fall Creators Update, permite que la aplicación genere un evento de UIA, lo cual conduce a que Narrador simplemente lleve a cabo un anuncio basado en texto que se proporciona con el evento, sin necesidad de tener un control correspondiente en la interfaz de usuario. En algunos escenarios, es una manera sencilla de mejorar drásticamente la accesibilidad de la aplicación. También puede ser útil para notificar el progreso de algún proceso que puede tardar mucho tiempo. Para obtener más información acerca de los eventos de notificación de UIA, vea ¿Puede su aplicación de escritorio aprovechar el nuevo evento de notificación de la interfaz de usuario?

El ejemplo siguiente genera el evento de notificación:

MethodInfo raiseMethod = typeof(AccessibleObject).GetMethod("RaiseAutomationNotification");
if (raiseMethod != null) {
   raiseMethod.Invoke(progressBar1.AccessibilityObject, new object[3] {/*Other*/ 4, /*All*/ 2, "The progress is 50%." });
}

Informaciones sobre herramientas en el acceso mediante teclado

En las aplicaciones que tienen como destino .NET Framework 4.7.2 y versiones anteriores, solo se puede desencadenar la aparición de la información sobre herramientas de un control moviendo el puntero del mouse en el control. A partir de .NET Framework 4.8, un usuario de teclado puede desencadenar la información sobre herramientas de un control poniendo el enfoque en el control mediante una tecla TAB o con las teclas de dirección, con o sin teclas modificadoras. Esta mejora de accesibilidad particular requiere un modificador de AppContext:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
   <startup>
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/>
   </startup>
   <runtime>
      <!-- AppContextSwitchOverrides values are in the form of key1=true|false;key2=true|false  -->
      <!-- Please note that disabling Switch.UseLegacyAccessibilityFeatures, Switch.UseLegacyAccessibilityFeatures.2 and Switch.UseLegacyAccessibilityFeatures.3 is required to disable Switch.System.Windows.Forms.UseLegacyToolTipDisplay -->
      <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false;Switch.UseLegacyAccessibilityFeatures.3=false;Switch.System.Windows.Forms.UseLegacyToolTipDisplay=false"/>
   </runtime>
</configuration>

La siguiente ilustración muestra la información sobre herramientas cuando el usuario ha seleccionado un botón con el teclado.

Captura de pantalla de la información sobre herramientas cuando el usuario se desplaza a un botón con el teclado.

Windows Presentation Foundation (WPF)

A partir de .NET Framework 4.8, WPF incluye una serie de mejoras de accesibilidad.

Los narradores de pantalla ya no anuncian los elementos con visibilidad oculta o contraída

El lector de pantalla ya no anuncia los elementos con visibilidad oculta o contraída. Si se anuncian al usuario las interfaces de usuario que contienen elementos con una visibilidad de Visibility.Collapsed o Visibility.Hidden, los lectores de pantalla pueden interpretarlos incorrectamente. A partir de .NET Framework 4.8, WPF ya no incluye elementos ocultos o contraídos en la vista de control del árbol de UIAutomation, por lo que los lectores de pantalla ya no pueden anunciar estos elementos.

Propiedad SelectionTextBrush para su uso con una selección de texto no basada en Adorner

En .NET Framework 4.7.2, WPF agregó la capacidad de dibujar una selección de texto TextBox y PasswordBox sin usar la capa de Adorner. El color de primer plano del texto seleccionado en este escenario lo dicta SystemColors.HighlightTextBrush.

.NET Framework 4.8 agrega una nueva propiedad, SelectionTextBrush, que permite a los desarrolladores seleccionar el pincel específico para el texto seleccionado cuando usan una selección de texto no basada en Adorner. Esta propiedad solo funciona en controles derivados de TextBoxBase y el control PasswordBox en aplicaciones de WPF con la selección de texto no basada en Adorner habilitada. No funciona en el control RichTextBox. Si no está habilitada la selección de texto no basada en Adorner, esta propiedad se omite.

Para usar esta propiedad, simplemente agréguela a su código XAML y use el enlace o el pincel adecuado. La selección de texto resultante tiene este aspecto:

Captura de pantalla de la aplicación que se ejecuta con las palabras Hola mundo seleccionadas.

Puede combinar el uso de las propiedades SelectionBrush y SelectionTextBrush para generar cualquier combinación de color de primer plano y de fondo que le parezca adecuada.

Compatibilidad con la propiedad de UIAutomation ControllerFor

La propiedad ControllerFor de UIAutomation devuelve una matriz de elementos de automatización que son manipulados por el elemento de automatización que es compatible con esta propiedad. Esta propiedad se utiliza normalmente para mejorar la accesibilidad de las sugerencias automáticas. ControllerFor se utiliza cuando un elemento de automatización afecta a uno o más segmentos de la interfaz de usuario de la aplicación o el escritorio. De otro modo, resulta difícil asociar el impacto de la operación de control de los elementos de la interfaz de usuario. Esta característica agrega la capacidad de que los controles puedan proporcionar un valor para la propiedad ControllerFor.

.NET Framework 4.8 agrega un nuevo método virtual, GetControlledPeersCore(). Para proporcionar un valor para la propiedad ControllerFor, simplemente reemplace este método y devuelva un List<AutomationPeer> para los controles que manipula este AutomationPeer:

public class AutoSuggestTextBox: TextBox
{
   protected override AutomationPeer OnCreateAutomationPeer()
   {
      return new AutoSuggestTextBoxAutomationPeer(this);
   }

   public ListBox SuggestionListBox;
}

internal class AutoSuggestTextBoxAutomationPeer : TextBoxAutomationPeer
{
   public AutoSuggestTextBoxAutomationPeer(AutoSuggestTextBox owner) : base(owner)
   {
   }

   protected override List<AutomationPeer> GetControlledPeersCore()
   {
      List<AutomationPeer> controlledPeers = new List<AutomationPeer>();
      AutoSuggestTextBox owner = Owner as AutoSuggestTextBox;
      controlledPeers.Add(UIElementAutomationPeer.CreatePeerForElement(owner.SuggestionListBox));
      return controlledPeers;
   }
}

Informaciones sobre herramientas en el acceso mediante teclado

En .NET Framework 4.7.2 y versiones anteriores, las informaciones sobre herramientas se muestran solo cuando el usuario desplaza el cursor del mouse sobre un control. En .NET Framework 4.8, las informaciones sobre herramientas también se muestran en el foco del teclado, así como a través de un método abreviado de teclado.

Para habilitar esta característica, una aplicación debe tener como destino .NET Framework 4.8 o participar mediante los Switch.UseLegacyAccessibilityFeatures.3 modificadores y Switch.UseLegacyToolTipDisplayAppContext . Este es un ejemplo de archivo de configuración de aplicación:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
   <startup>
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
   </startup>
   <runtime>
      <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false;Switch.UseLegacyAccessibilityFeatures.3=false;Switch.UseLegacyToolTipDisplay=false" />
   </runtime>
</configuration>

Una vez habilitados, todos los controles que contienen una información sobre herramientas la muestran cuando el control recibe el foco de teclado. Puede descartarse la información sobre herramientas dejando transcurrir un determinado tiempo o cambiando el foco del teclado. Los usuarios también pueden descartar la información sobre herramientas manualmente mediante un nuevo método abreviado de teclado, Ctrl+Mayús+F10. Una vez descartada la información sobre herramientas, se puede volver a mostrar mediante el mismo método abreviado de teclado.

Nota:

Las informaciones sobre herramientas de la cinta de opciones en controles Ribbon no se mostrarán en el foco del teclado; solo se muestran mediante el método abreviado de teclado.

Se ha agregado compatibilidad con las propiedades de UIAutomation SizeOfSet y PositionInSet

Windows 10 introdujo dos nuevas propiedades de UIAutomation, SizeOfSet y PositionInSet, que las aplicaciones usan para describir el recuento de elementos en un conjunto. Las aplicaciones cliente de UIAutomation, como los lectores de pantalla, posteriormente pueden consultar en una aplicación estas propiedades y anunciar una representación exacta de la interfaz de usuario de la aplicación.

A partir de .NET Framework 4.8, WPF expone estas dos propiedades a UIAutomation en aplicaciones WPF. Esto puede realizarse de dos maneras:

  • Mediante el uso de propiedades de dependencia.

    WPF agrega dos nuevas propiedades de dependencia, AutomationProperties.SizeOfSet y AutomationProperties.PositionInSet. Un desarrollador puede usar XAML para establecer sus valores:

    <Button AutomationProperties.SizeOfSet="3"
      AutomationProperties.PositionInSet="1">Button 1</Button>
    
    <Button AutomationProperties.SizeOfSet="3"
      AutomationProperties.PositionInSet="2">Button 2</Button>
    
    <Button AutomationProperties.SizeOfSet="3"
      AutomationProperties.PositionInSet="3">Button 3</Button>
    
  • Invalidando los métodos virtuales AutomationPeer.

    Los GetSizeOfSetCore() métodos virtuales y GetPositionInSetCore() se agregaron a la AutomationPeer clase . Un desarrollador puede proporcionar valores para SizeOfSet y PositionInSet reemplazando estos métodos, como se muestra en el ejemplo siguiente:

    public class MyButtonAutomationPeer : ButtonAutomationPeer
    {
      protected override int GetSizeOfSetCore()
      {
          // Call into your own logic to provide a value for SizeOfSet
          return CalculateSizeOfSet();
      }
    
      protected override int GetPositionInSetCore()
      {
          // Call into your own logic to provide a value for PositionInSet
          return CalculatePositionInSet();
      }
    }
    

Además, los elementos de instancias de ItemsControl proporcionan un valor para estas propiedades automáticamente sin ninguna acción adicional del desarrollador. Si un ItemsControl está agrupado, la colección de grupos se representa como un conjunto y cada grupo se cuenta como un conjunto independiente, con cada elemento dentro del grupo proporcionando su posición dentro del grupo, así como el tamaño del grupo. Los valores automáticos no se ven afectados por la virtualización. Incluso si un elemento no se materializa, se sigue contabilizando de cara a obtener el tamaño total del conjunto y afecta a la posición en el conjunto de sus elementos del mismo nivel.

Solo se proporcionan valores automáticos si la aplicación tiene como destino .NET Framework 4.8. En el caso de las aplicaciones destinadas a una versión anterior de .NET Framework, puede establecer el Switch.UseLegacyAccessibilityFeatures.3modificador AppContext, como se muestra en el siguiente archivo App.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
   <startup>
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
   </startup>
   <runtime>
      <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false;Switch.UseLegacyAccessibilityFeatures.3=false" />
   </runtime>
</configuration>

Diseñador de flujo de trabajo de Windows Workflow Foundation (WF)

El Diseñador de flujo de trabajo incluye los cambios siguientes en .NET Framework 4.8:

  • Los usuarios de Narrador podrán ver mejoras en las etiquetas de caso FlowSwitch.

  • Los usuarios de Narrador podrán ver mejoras en las descripciones de los botones.

  • Los usuarios que elijan temas de contraste alto verán mejoras en la visibilidad del Diseñador de flujo de trabajo y sus controles, como relaciones de contraste mejoradas entre los elementos y cuadros de selección más evidentes para los elementos del foco.

Si la aplicación tiene como destino .NET Framework 4.7.2 o una versión anterior, puede optar por estos cambios estableciendo el modificador falseAppContext en en el Switch.UseLegacyAccessibilityFeatures.3 archivo de configuración de la aplicación. Para obtener más información, consulte la sección Aprovechar las mejoras de accesibilidad de este artículo.

Novedades de accesibilidad en .NET Framework 4.7.2

.NET Framework 4.7.2 incluye nuevas características de accesibilidad en las siguientes áreas:

Windows Forms

Colores definidos por el sistema operativo en los temas de contraste alto

A partir de .NET Framework 4.7.2, Windows Forms usa colores definidos por el sistema operativo en los temas de contraste alto. Esto afecta a los siguientes controles:

Mejoras de Narrador

A partir de .NET Framework 4.7.2, la compatibilidad con Narrador ha mejorado de la siguiente manera:

  • El valor de la propiedad ToolStripMenuItem.ShortcutKeys se anuncia al anunciar el texto de un objeto ToolStripMenuItem.

  • Indica cuándo un objeto ToolStripMenuItem tiene su propiedad Enabled establecida en false.

  • Ofrece información sobre el estado de una casilla cuando la propiedad ListView.CheckBoxes está establecida en true.

  • El orden de foco del Modo de examen de Narrador es coherente con el orden visual de los controles del cuadro de diálogo de descarga de ClickOnce.

Mejoras de DataGridView

A partir de .NET Framework 4.7.2, el control DataGridView presenta las siguientes mejoras de accesibilidad:

Indicaciones visuales mejoradas

  • Los RadioButton controles y CheckBox con una propiedad vacía Text muestran un indicador de foco cuando reciben el foco.

Compatibilidad con la cuadrícula de propiedades mejorada

  • Los PropertyGrid elementos secundarios del control ahora devuelven un true para la IsReadOnlyProperty propiedad solo cuando se habilita un elemento PropertyGrid.

  • Los elementos secundarios del control PropertyGrid devuelven un valor false para la propiedad IsEnabledProperty solo cuando el usuario pueda modificar un elemento PropertyGrid.

Navegación mejorada mediante el teclado

Windows Presentation Foundation (WPF)

Cambios en los controles CheckBox y RadioButton

En .NET Framework 4.7.1 y versiones anteriores, los controles System.Windows.Controls.CheckBox y System.Windows.Controls.RadioButton de WPF tenían objetos visuales de foco incoherentes y, en los temas Clásico y Contraste alto, eran incorrectos. Estos problemas se producen en casos en los que no se ha definido ningún contenido para los controles. Esto puede hacer que la transición entre los temas sea confusa y el objeto visual de foco difícil de ver.

En .NET Framework 4.7.2, estos objetos visuales son ahora más coherentes entre los temas y se ven más fácilmente en los temas Clásico y Contraste alto.

Controles de WinForms hospedados en una aplicación WPF

En un control de WinForms hospedado en una aplicación WPF en .NET Framework 4.7.1 y versiones anteriores, no se podía usar el tabulador para salir de la capa de WinForms si el primer o último control de esa capa era el control ElementHost de WPF. Ahora, en .NET Framework 4.7.2 se puede usar el tabulador para salir de la capa de WinForms.

Con todo, puede que las aplicaciones automatizadas que se basan en que el foco no escape nunca de la capa de WinForms dejen de funcionar según lo previsto.

Novedades de accesibilidad en .NET Framework 4.7.1

.NET Framework 4.7.1 incluye nuevas características de accesibilidad en las siguientes áreas:

Windows Presentation Foundation (WPF)

Mejoras del lector de pantalla

Si las mejoras de accesibilidad están habilitadas, .NET Framework 4.7.1 incluye las siguientes mejoras que afectan a los lectores de pantalla:

  • En .NET Framework 4.7 y versiones anteriores, los lectores de pantalla anunciaban los controles Expander como botones. A partir de .NET Framework 4.7.1, se anuncian correctamente como grupos que se pueden contraer y expandir.

  • En .NET Framework 4.7 y versiones anteriores, los lectores de pantalla anunciaban los controles DataGridCell como “personalizados”. A partir de .NET Framework 4.7.1, se anuncian correctamente como celdas de cuadrícula de datos (localizadas).

  • A partir de .NET Framework 4.7.1, los lectores de pantalla anuncian el nombre de un ComboBox editable.

  • En .NET Framework 4.7 y versiones anteriores, los controles PasswordBox se anunciaban como “no hay elemento a la vista” o tenían un comportamiento incorrecto. Este problema se corrigió a partir de .NET Framework 4.7.1.

Compatibilidad con las regiones activas de UIAutomation

Los lectores de pantalla como Narrador ayudan a los usuarios a leer el contenido de la interfaz de usuario de una aplicación, normalmente mediante salida de texto a voz del contenido de la interfaz de usuario que tiene el foco. Pero si un elemento de la interfaz de usuario cambia y no tiene el foco, puede que no se notifique al usuario y este pierda información importante. Las regiones activas aspiran a resolver este problema. Un desarrollador puede usarlas para informar al lector de pantalla o a cualquier otro cliente de UIAutomation de que se ha realizado un cambio importante en un elemento de la interfaz de usuario. Luego el lector de pantalla puede decidir cómo y cuándo informar al usuario de este cambio.

Para admitir las regiones activas, se han agregado las siguientes API a WPF:

Puede crear una región activa si establece la propiedad AutomationProperties.LiveSetting en el elemento de interés, como se muestra en el ejemplo siguiente:

<TextBlock Name="myTextBlock" AutomationProperties.LiveSetting="Assertive">announcement</TextBlock>

Cuando cambian los datos de la región activa y necesita informar a un lector de pantalla, puede generar un evento de forma explícita, como se muestra en el ejemplo siguiente.

var peer = FrameworkElementAutomationPeer.FromElement(myTextBlock);

peer.RaiseAutomationEvent(AutomationEvents.LiveRegionChanged);
Dim peer = FrameworkElementAutomationPeer.FromElement(myTextBlock)
peer.RaiseAutomationEvent(AutomationEvents.LiveRegionChanged)

Contraste alto

A partir de .NET Framework 4.7.1, se han realizado mejoras de contraste alto en diversos controles de WPF. Ahora son visibles cuando el tema HighContrast está establecido. Se incluyen los siguientes:

  • Control Expander

    El objeto visual de foco del Expander control ahora está visible. Los objetos visuales de teclado de los controles ComboBox, ListBox y RadioButton también son visibles. Por ejemplo:

    Antes:

    Captura de pantalla del control de expansor con objeto visual de foco y sin foco.

    Después:

    Captura de pantalla del control de expansor con el foco que muestra una línea de puntos alrededor del texto del control.

  • Controles CheckBox y RadioButton

    El texto de los controles CheckBox y RadioButton ahora es más fácil de ver cuando se selecciona en los temas de contraste alto. Por ejemplo:

    Antes:

    Captura de pantalla de los botones de radio y de comprobación con visibilidad de texto deficiente en los temas de contraste alto.

    Después:

    Captura de pantalla de los botones de radio y de comprobación con una mejor visibilidad de texto en los temas de contraste alto.

  • Control ComboBox

    A partir de .NET Framework 4.7.1, el borde de un control ComboBox deshabilitado es del mismo color que el texto deshabilitado. Por ejemplo:

    Antes:

    Captura de pantalla de un cuadro combinado deshabilitado con borde y texto del control en distintos colores.

    Después:

    Captura de pantalla de un cuadro combinado deshabilitado con borde del mismo color que el texto del control.

    Además, los botones deshabilitados y con foco usan el color de tema correcto.

    Antes:

    Captura de pantalla de un botón negro con texto en gris que indica

    Después:

    Captura de pantalla de un botón azul con texto en negro que indica

    Por último, en .NET Framework 4.7 y versiones anteriores, al establecer el estilo de un control ComboBox en Toolbar.ComboBoxStyleKey, la flecha de lista desplegable se hacía invisible. Este problema se corrigió a partir de .NET Framework 4.7.1. Por ejemplo:

    Antes:

    Captura de pantalla de un control de cuadro combinado con una flecha desplegable invisible.

    Después:

    Captura de pantalla de un control de cuadro combinado que muestra la flecha desplegable.

  • Control DataGrid

    A partir de .NET Framework 4.7.1, la flecha de indicador de orden de los controles DataGrid usa los colores de tema correctos. Por ejemplo:

    Antes:

    Captura de pantalla de la flecha de indicador de orden antes de las mejoras.

    Después:

    Captura de pantalla de la flecha de indicador de orden después de las mejoras.

    Además, en .NET Framework 4.7 y versiones anteriores, el estilo de vínculo predeterminado cambiaba a un color incorrecto cuando se colocaba el mouse encima en los modos de contraste alto. Esto se resolvió a partir de .NET Framework 4.7.1. De forma similar, DataGrid las columnas de casilla usan los colores esperados para los comentarios de foco del teclado a partir de .NET Framework 4.7.1.

    Antes:

    Captura de pantalla de un vínculo que dice Click Me! en rojo.

    Después:

    Captura de pantalla de un vínculo que dice Click Me! en amarillo.

Para más información sobre las mejoras de accesibilidad de WPF en .NET Framework 4.7.1, vea Mejoras de accesibilidad en WPF.

Mejoras de accesibilidad de Windows Forms

En .NET Framework 4.7.1, Windows Forms (WinForms) incluye cambios de accesibilidad en las áreas siguientes.

Visualización mejorada en modo de contraste alto

A partir de .NET Framework 4.7.1, varios controles de WinForms ofrecen una representación mejorada en los modos de contraste alto disponibles en el sistema operativo. Windows 10 ha cambiado los valores de algunos colores del sistema de contraste alto y Windows Forms se basa en el marco de trabajo de Windows 10 Win32. Para obtener la mejor experiencia, ejecute en la versión más reciente de Windows y opte por los cambios más recientes del sistema operativo agregando un archivo app.manifest en una aplicación de prueba y quite la marca de comentario de la línea de sistema operativo compatible Windows 10 para que tenga el siguiente aspecto:

<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />

Algunos ejemplos de cambios de contraste alto:

  • Las marcas de verificación de los elementos MenuStrip son más fáciles de ver.

  • Cuando se activan, los elementos MenuStrip deshabilitados son más fáciles de ver.

  • El texto de un control Button seleccionado contrasta con el color de selección.

  • El texto deshabilitado es más fácil de leer. Por ejemplo:

    Antes:

    Captura de pantalla de una aplicación que usa distintos controles que se ejecutan en el modo de alto contraste antes de las mejoras de accesibilidad.

    Después:

    Captura de pantalla de una aplicación que usa distintos controles que se ejecutan en el modo de alto contraste después de las mejoras de accesibilidad.

  • Mejoras de contraste alto en el cuadro de diálogo de excepción de subproceso.

Compatibilidad mejorada con Narrador

Windows Forms en .NET Framework 4.7.1 incluye las siguientes mejoras de accesibilidad para Narrador:

  • Narrador, así como otras herramientas de automatización de la interfaz de usuario, pueden acceder al control MonthCalendar.

  • El control CheckedListBox avisa a Narrador cuando ha cambiado el estado de activación de un elemento para que el usuario sepa que ha cambiado el valor de un elemento de lista.

  • El control DataGridViewCell notifica el estado correcto de solo lectura a Narrador.

  • Narrador ahora puede leer texto ToolStripMenuItem deshabilitado, mientras que anteriormente omitía los elementos de menú deshabilitados.

Compatibilidad mejorada con los patrones de accesibilidad de UIAutomation

A partir de .NET Framework 4.7.1, los desarrolladores de herramientas de tecnología de accesibilidad pueden aprovechar los patrones comunes de accesibilidad de API y las propiedades de varios controles de WinForms. Estas mejoras de accesibilidad incluyen:

Experiencia mejorada del explorador de propiedades

A partir de .NET Framework 4.7.1, Windows Forms incluye:

  • Una mejor navegación mediante teclado gracias a las distintas ventanas de selección desplegables.
  • Una reducción de puntos de tabulación innecesarios.
  • Mejor notificación de tipos de control.
  • Comportamiento mejorado de Narrador.

Controles web ASP.NET

A partir de .NET Framework 4.7.1 y la versión 15.3 de Visual Studio 2017, ASP.NET mejora el funcionamiento de los controles web ASP.NET con la tecnología de accesibilidad en Visual Studio. Los cambios son los siguientes:

  • Cambios para implementar patrones de accesibilidad de interfaz de usuario que faltan en los controles, como el cuadro de diálogo Agregar campo en el Asistente para vistas de detalles o el cuadro de diálogo Configurar ListView del Asistente de ListView.

  • Cambios para mejorar la presentación en el modo Contraste alto, como el Editor de campos del elemento de paginación de datos.

  • Cambios para mejorar las experiencias de navegación del teclado para los controles, como el cuadro de diálogo Campos del Asistente para editar campos del elemento de paginación del control DataPager, el cuadro de diálogo Configurar ObjectContext o el cuadro de diálogo Configurar selección de datos del Asistente para configurar origen de datos.

Herramientas del SDK de .NET

Se han corregido varios problemas de accesibilidad para mejorar la herramienta del editor de configuración (SvcConfigEditor.exe) y la herramienta del visor de seguimiento de servicios (SvcTraceViewer.exe). La mayoría eran problemas menores como un nombre sin definir o determinados patrones de automatización de la interfaz de usuario que no se implementaban correctamente. Aunque muchos usuarios no son conscientes de estos valores incorrectos, los clientes que usen tecnologías de asistencia como lectores de pantalla encontrarán estas herramientas del SDK más accesibles.

Estas mejoras cambian algunos comportamientos anteriores, como el orden del foco de teclado.

Diseñador de flujo de trabajo de Windows Workflow Foundation (WF)

Los cambios de accesibilidad en el Diseñador de flujo de trabajo son los siguientes:

  • El orden de tabulación cambia de izquierda a derecha y de arriba a abajo en algunos controles:

  • Hay más funciones disponibles a través del teclado:

    • Al editar las propiedades de una actividad, los grupos de propiedades se pueden contraer mediante el teclado la primera vez que obtienen el foco.

    • Los iconos de advertencia son accesibles con el teclado.

    • El botón Más propiedades de la ventana Propiedades es accesible con el teclado.

    • Los usuarios del teclado pueden tener acceso a los elementos de encabezado en los paneles Argumentos y Variables del Diseñador de flujo de trabajo.

  • Visibilidad mejorada de los elementos con el foco, por ejemplo cuando:

    • Se agregan filas a las cuadrículas de datos usadas por los diseñadores de actividad y el Diseñador de flujo de trabajo.

    • Desplazamiento entre campos en las actividades ReceiveReply y SendReply.

    • Establecimiento de valores predeterminados para variables o argumentos.

  • Los lectores de pantalla ahora pueden reconocer correctamente:

    • Los puntos de interrupción establecidos en el Diseñador de flujo de trabajo.

    • Las actividades FlowSwitch<T>, FlowDecision y CorrelationScope.

    • El contenido de la actividad Receive.

    • El tipo de destino para la actividad InvokeMethod.

    • El cuadro combinado Excepción y la sección Finally de la actividad TryCatch.

    • El cuadro combinado Tipo de mensaje, el divisor de la ventana Agregar inicializadores de correlación, la ventana Definición de contenido y la ventana Definición de CorrelatesOn en las actividades de mensajería (Receive, Send, SendReply y ReceiveReply).

    • Transiciones a máquina de estados y destinos de transición.

    • Anotaciones y conectores en las actividades FlowDecision.

    • Los menús contextuales (clic con el botón derecho) para las actividades.

    • Los editores de valor de propiedad, el botón Borrar búsqueda, los botones de ordenación Por categoría y Alfabético, y el cuadro de diálogo Editor de expresiones en la cuadrícula de propiedades.

    • El porcentaje de zoom en el Diseñador de flujo de trabajo.

    • El separador en las actividades Parallel y Pick.

    • La actividad InvokeDelegate.

    • La ventana Seleccionar tipos para las actividades de diccionario (Microsoft.Activities.AddToDictionary<TKey,TValue>, Microsoft.Activities.RemoveFromDictionary<TKey,TValue>, etc.).

    • La ventana Examinar y seleccionar un tipo .NET.

    • Rutas de navegación en el Diseñador de flujo de trabajo.

  • Los usuarios que elijan temas de contraste alto verán muchas mejoras en la visibilidad del Diseñador de flujo de trabajo y sus controles, como relaciones de contraste mejoradas entre los elementos y cuadros de selección más evidentes para los elementos del foco.

Vea también