Novidades de acessibilidade no .NET Framework

O .NET Framework pretende tornar os aplicativos mais acessíveis para os usuários. As funcionalidades de acessibilidade permitem que um aplicativo forneça uma experiência apropriada para os usuários da Tecnologia Adaptativa. A partir do .NET Framework 4.7.1, o .NET Framework inclui diversas melhorias de acessibilidade que permitem aos desenvolvedores criar aplicativos acessíveis.

Opções de acessibilidade

Configure seu aplicativo para aceitar os recursos de acessibilidade se ele for direcionado ao .NET Framework 4.7 ou a uma versão anterior, mas estiver em execução no .NET Framework 4.7.1 ou posterior. Além disso, configure seu aplicativo para usar recursos herdados (e não aproveitar os recursos de acessibilidade) se ele for direcionado ao .NET Framework 4.7.1 ou posterior. Cada versão do .NET Framework que inclui funcionalidades de acessibilidade tem uma opção de acessibilidade específica, que é adicionada ao elemento <AppContextSwitchOverrides> na seção <runtime> do arquivo de configuração do aplicativo. Estas são as opções compatíveis:

Versão Comutador
.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 ─ Atualização cumulativa KB4569746 para o .NET Framework 4.8 "Switch.UseLegacyAccessibilityFeatures.4"
.NET Framework 4.8.1 "Switch.UseLegacyAccessibilityFeatures.5"

Aproveitando as vantagens das melhorias de acessibilidade

As novas funcionalidades de acessibilidade são habilitadas por padrão para os aplicativos direcionados ao .NET Framework 4.7.1 ou posterior. Além disso, os aplicativos direcionados a uma versão anterior do .NET Framework, mas que estão em execução no .NET Framework 4.7.1 ou posterior, podem recusar os comportamentos de acessibilidade herdados (e, portanto, aproveitar as melhorias de acessibilidade) adicionando opções ao elemento <AppContextSwitchOverrides> na seção <runtime> do arquivo de configuração do aplicativo e definindo seu valor como false. O seguinte snippet mostra como aceitar os aprimoramentos de acessibilidade introduzidos no .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>

Ao optar por aceitar as funcionalidades de acessibilidade em uma versão posterior do .NET Framework, você também deve aceitar explicitamente as de versões anteriores. Para configurar seu aplicativo para aproveitar as melhorias de acessibilidade no .NET Framework 4.7.1 e 4.7.2, adicione o seguinte 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" />
</runtime>

Para configurar seu aplicativo para aproveitar as melhorias de acessibilidade no .NET Framework 4.7.1, 4.7.2, 4.8 e na atualização cumulativa de agosto de 2020 para o .NET Framework 4.8, adicione o seguinte 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>

Restaurando o comportamento herdado

Os aplicativos destinados a versões do .NET Framework a partir da 4.7.1 podem desabilitar as funcionalidades de acessibilidade adicionando opções ao elemento <AppContextSwitchOverrides> na seção <runtime> do arquivo de configuração do aplicativo e definindo o respectivo valor como true. Por exemplo, a seguinte configuração recusa os recursos de acessibilidade introduzidos no .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>

Novidades na acessibilidade do .NET Framework 4.8.1

O .NET Framework 4.8.1 inclui novos recursos de acessibilidade nas seguintes áreas:

Windows Forms

Representações de UIA adicionadas e aprimoradas

Antes do .NET Framework 4.8.1, o Windows Forms não era compatível com uma variedade de padrões UIA para dar suporte à tecnologia adaptativa de interação com aplicativos. Essa deficiência pode fazer com que o Narrador ou outros leitores de tela relatem informações incompletas ou incorretas. Ela também pode afetar funcionalidades importantes, como mover um cursor no texto em um controle TextBox. Com o .NET Framework 4.8.1, todos os padrões necessários para os controles comuns foram implementados. Essa nova funcionalidade oferece aos usuários de tecnologia adaptativa uma experiência de interação com o aplicativo muito mais rica.

  • Adicionado suporte para o padrão de expansão/recolhimento do UIA ao controle DateTimePicker.
  • Adicionado o suporte do UIA ao controle MonthCalendar. Agora, as ferramentas de tecnologia adaptativa, como o Narrador, podem navegar pelas datas individuais no controle.
  • Suporte a padrões de texto implementados para todos os controles baseados em texto, incluindo os controles de edição TextBox, MaskedTextBox e PropertyGrid e os controles DataGridViewTextBoxCell, ToolStripTextBox e DomainUpDown.
  • ToolTip agora segue as diretrizes do WCAG2.1 de ser persistente, ignorável e focalizável no Windows 11. As alterações no comportamento da dica de ferramenta são limitadas a sistemas Windows 11 que têm o .NET Framework 4.8.1 instalado e se aplicam apenas a aplicativos em que um tempo limite não está definido para a dica de ferramenta. Dicas de ferramenta que persistem podem ser ignoradas com a tecla Esc ou Ctrl ou navegando até um controle com outro conjunto de dicas de ferramentas.

Várias correções de bug em recursos de acessibilidade existentes

  • Agora, o Narrador pode se concentrar em um controle DataGridView vazio.
  • Foi resolvido um problema que fazia com que os leitores de tela contassem colunas ocultas ao anunciar a contagem de colunas em um controle DataGridView.
  • Foi resolvido um problema que fazia com que o DataGridView ignorasse as configurações de fonte definidas no DataGridviewCellStyle quando o formulário subjacente tinha uma propriedade Font diferente de DefaultFont.
  • Foi atualizada a propriedade AccessibleName das barras de rolagem internas do controle DataGridView para remover o texto "ScrollBar".
  • Foi corrigida a cor de um DataGridViewLinkCell quando a célula é selecionada.
  • Foi corrigido um problema com controles DataGridView personalizados em que não havia ControlType ou LocalizedControlType fornecidos para elementos de DataGridViewCell personalizados.
  • Foi atualizada a taxa de luminosidade para 3.5:1 em controles ToolStripButton com ToolStripRenderMode definido como System.
  • Foi aprimorada a navegação por teclado em um ToolStrip quando o elemento é um tipo ToolStripComboBox.
  • Foi atualizada a cor da tela de fundo do ToolStripButton no modo de alto contraste.
  • Foi garantido que haja um retângulo delimitador relatado à tecnologia adaptativa para o ToolStripSeparator.
  • Foi corrigido um problema que podia causar falha do leitor de tela JAWS ao ler o controle PropertyGrid.
  • Foi garantido que a árvore de hierarquia do UIA de um controle PropertyGrid seja atualizada quando uma entrada complexa como Font é expandida. Também foi garantido que a árvore seja atualizada corretamente quando a entrada for recolhida e não ficar mais visível.
  • As categorias PropertyGrid agora têm um tipo de controle localizado PropertyGrid category.
  • Foi corrigido um problema com o ComboBox que podia fazer com que o aplicativo falhasse no Accessibility Insights para Windows.
  • Foi atualizada a cor da borda do Button para haver mais contraste nas cores padrão.
  • Foram habilitadas ferramentas de tecnologia adaptativa para acessar os botões ControlBox de um formulário filho MDI maximizado.
  • A propriedade AccessibleName de um controle DomainUpDown tem um novo valor padrão de cadeia de caracteres vazia. A cadeia de caracteres vazia incentivará os desenvolvedores a criar um nome significativo em vez de aceitar o valor padrão não vazio anterior.
  • Foi atualizada a propriedade AccessibleName do botão Imprimir no PrintPreviewDialog de "Botão Imprimir" para "Imprimir" para evitar redundância quando os leitores de tela anunciarem o controle e o tipo.
  • Foram atualizados os controles de lista de UIA para remover um elemento de lista vazio quando uma célula PropertyGrid do tipo ComboBox é fechada e não fica mais visível.

Windows Presentation Foundation (WPF)

Aprimoramentos no tratamento de dicas de ferramentas acessíveis

Nesta versão, o WPF aprimorou a experiência garantindo que uma dica de ferramenta na janela atual possa ser facilmente ignorada usando a tecla Esc, a tecla Ctrl (sozinha) ou a combinação Ctrl+Shift+F10. O escopo da tecla Esc foi reduzido nesta versão para se aplicar somente à janela atual. Antes ele era aplicado a qualquer dica de ferramenta aberta no aplicativo. Por padrão, as dicas de ferramenta do WPF seguirão as diretrizes do WCAG2.1 de ser persistentes, ignoráveis e focalizáveis.

Novidades de acessibilidade na atualização cumulativa de 11 de agosto de 2020 para o .NET Framework 4.8

A atualização cumulativa KB4569746 de 11 de agosto de 2020 para o .NET Framework 4.8 inclui novas funcionalidades de acessibilidade no Windows Forms:

  • Resolve um problema relativo ao anúncio de itens do controle PropertyGrid e ao estado expandido/recolhido de uma categoria por leitores de tela.

  • Atualiza os padrões acessíveis do controle PropertyGrid e seus elementos internos.

  • Atualiza os nomes acessíveis dos elementos internos do controle PropertyGrid para que sejam anunciados corretamente pelos leitores de tela.

  • Lida com as propriedades acessíveis do retângulo delimitador para os controles PropertyGridView.

  • Permite que os leitores de tela anunciem corretamente o estado expandido/recolhido das células da caixa de combinação DataGridView.

Novidades na acessibilidade do .NET Framework 4.8

O .NET Framework 4.8 inclui novos recursos de acessibilidade nas seguintes áreas:

Windows Forms

No .NET Framework 4.8, o Windows Forms adiciona suporte ao LiveRegions e Eventos de Notificação para muitos controles usados. Ele também adiciona suporte para Dicas de Ferramentas quando um usuário navega para um controle usando o teclado.

Suporte para UIA LiveRegions em rótulos e StatusStrips

UIA LiveRegions permitem que os desenvolvedores de aplicativos notifiquem os leitores de tela de uma alteração de texto em um controle que está localizado longe do local em que o usuário está trabalhando. Isso é útil, por exemplo, para um controle StatusStrip que mostra um status de conexão. Se a conexão cair e o status mudar, o desenvolvedor deverá notificar o leitor de tela.

A partir do .NET Framework 4.8, o Windows Forms implementa UIA LiveRegions nos controles Label e StatusStrip. Por exemplo, o seguinte código usa o para LiveRegion em um controle Label chamado label1:

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

…
Label1.Text = "Ready!";

O narrador anuncia “Pronto” independentemente de onde o usuário esteja interagindo com o aplicativo.

Você também pode implementar seu UserControl como uma LiveRegion:

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 notificação de UIA

O evento de notificação de UIA, apresentado no Windows 10 Fall Creators Update, permite que seu aplicativo gere um evento UIA, que leva o Narrador a simplesmente fazer um anúncio com base no texto que você forneceu com o evento, sem a necessidade de ter um controle correspondente na interface do usuário. Em alguns cenários, isso é uma maneira direta de melhorar consideravelmente a acessibilidade de seu aplicativo. Também pode ser útil para notificar sobre o progresso de algum processo que pode levar muito tempo. Para obter mais informações sobre eventos de Notificação de UIA, consulte Seu aplicativo da área de trabalho pode utilizar o novo evento de Notificação de UIA?.

O exemplo a seguir gera o Evento de notificação:

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

Dicas de ferramentas sobre o acesso ao teclado

Em aplicativos destinados ao .NET Framework 4.7.2 e versões anteriores, uma dica de ferramenta de controle só pode ser acionada para exibição ao mover o ponteiro do mouse no controle. A partir do .NET Framework 4.8, um usuário de teclado pode disparar a dica de ferramenta de um controle focando o controle com a tecla Tab ou as teclas de seta com ou sem teclas modificadoras. Essa melhoria de acessibilidade específica exige uma outra opção 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>

A figura a seguir mostrará a dica de ferramenta quando o usuário selecionar um botão com o teclado.

Screenshot of tooltip when user navigates to button with the keyboard.

Windows Presentation Foundation (WPF)

A partir do .NET Framework 4.8, o WPF inclui vários aprimoramentos de acessibilidade.

Narradores de tela não anunciam mais elementos com visibilidade recolhida ou oculta

Elementos com visibilidade recolhida ou oculta não são mais anunciados pelo leitor de tela. As interfaces do usuário que contêm elementos com uma Visibilidade de Visibility.Collapsed ou Visibility.Hidden poderão ser adulteradas pelos leitores de tela se forem apresentadas ao usuário. A partir do .NET Framework 4.8, o WPF não inclui mais elementos recolhidos ou ocultos na Exibição de Controle da árvore do UIAutomation. Portanto, os leitores de tela não podem anunciar esses elementos.

Propriedade SelectionTextBrush para uso com a seleção de texto não baseada em Adorno

No .NET Framework 4.7.2, o WPF adicionou a capacidade de chamar as seleções de texto TextBox e PasswordBox sem usar a camada de Adorno. A cor de primeiro plano do texto selecionado nesse cenário foi determinada pelo SystemColors.HighlightTextBrush.

O .NET framework 4.8 adiciona uma nova propriedade, SelectionTextBrush, que permite que os desenvolvedores selecionem o pincel específico para o texto selecionado quando usar a seleção de texto não baseada em Adorno. Esta propriedade funciona apenas nos controles derivados de TextBoxBase e o controle PasswordBox em aplicativos WPF com seleção de texto não baseada em Adorno habilitada. Ela não funciona no controle RichTextBox. Se a seleção de texto não baseada em Adorno não estiver habilitada, essa propriedade será ignorada.

Para usar essa propriedade, basta adicioná-la ao seu código XAML e usar a associação ou o pincel adequado. A seleção de texto resultante tem esta aparência:

Screenshot of the app running with the words Hello World selected.

Você pode combinar o uso das propriedades SelectionBrush e SelectionTextBrush para gerar qualquer combinação de plano de fundo e cor de primeiro plano que julgar adequada.

Suporte para a propriedade ControllerFor do UIAutomation

A propriedade ControllerFor do UIAutomation retorna uma matriz de elementos de automação manipulados pelo elemento de automação que dá suporte a essa propriedade. Essa propriedade normalmente é usada para acessibilidade de sugestão automática. ControllerFor é usado quando um elemento de automação afeta um ou mais segmentos de interface do usuário do aplicativo ou da área de trabalho. Caso contrário, é difícil associar o impacto da operação de controle com elementos de interface do usuário. Este recurso adiciona a capacidade de controles para fornecer um valor para a propriedade ControllerFor.

O .NET framework 4.8 adiciona um novo método virtual, o GetControlledPeersCore(). Para fornecer um valor para a propriedade ControllerFor, basta substituir este método e retornar um List<AutomationPeer> para os controles manipulados por 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;
   }
}

Dicas de ferramentas sobre o acesso ao teclado

No .NET Framework 4.7.2 e versões anteriores, as dicas de ferramentas são exibidas somente quando o usuário passar o cursor do mouse sobre um controle. No .NET Framework 4.8, as dicas de ferramentas também são exibidas no foco do teclado, bem como por meio de um atalho de teclado.

Para habilitar esse recurso, um aplicativo precisa direcionar o .NET Framework 4.8 ou aceitar ao usar as opções Switch.UseLegacyAccessibilityFeatures.3 e Switch.UseLegacyToolTipDisplayAppContext. Veja a seguir um arquivo de exemplo de configuração de aplicativo:

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

Depois de habilitados, todos os controles que contêm uma dica de ferramenta vão exibi-la depois que o controle receber o foco do teclado. A dica de ferramenta pode ser ignorada com o tempo ou quando o foco do teclado mudar. Os usuários também podem dispensar a dica de ferramenta manualmente usando um novo atalho de teclado: Ctrl + Shift + F10. Depois de ignorar a dica de ferramenta, é possível exibi-la novamente usando o mesmo atalho de teclado.

Observação

As dicas de ferramentas da faixa de opções nos controles Ribbon não serão exibidas no foco do teclado. São exibidas somente por meio do atalho de teclado.

Adicionado suporte para propriedades SizeOfSet e PositionInSet do UIAutomation

O Windows 10 introduziu duas novas propriedades do UIAutomation, SizeOfSet e PositionInSet, que são usadas por aplicativos para descrever a contagem de itens em um conjunto. Aplicativos de cliente do UIAutomation, como leitores de tela podem, então, consultar um aplicativo para essas propriedades e anunciar uma representação precisa da interface de usuário do aplicativo.

A partir do .NET Framework 4.8, o WPF expõe essas duas propriedades para UIAutomation em aplicativos WPF. Isso pode ser feito de duas maneiras:

  • Usando propriedades de dependência.

    O WPF adiciona duas novas propriedades de dependência, AutomationProperties.SizeOfSet e AutomationProperties.PositionInSet. Um desenvolvedor pode usar o XAML para definir seus 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>
    
  • Ao substituir métodos virtuais do AutomationPeer.

    Os métodos virtuais GetSizeOfSetCore() e GetPositionInSetCore() foram incluídos à classe AutomationPeer. Um desenvolvedor pode fornecer valores para SizeOfSet e PositionInSet por meio da substituição desses métodos, conforme mostrado no exemplo a seguir:

    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();
      }
    }
    

Além disso, os itens nas instâncias ItemsControl fornecem um valor para essas propriedades automaticamente sem ação adicional do desenvolvedor. Se um ItemsControl for agrupado, a coleção de grupos será representada como um conjunto e cada grupo será contado como um conjunto separado, com cada item dentro desse grupo fornecendo sua posição dentro desse grupo, bem como o tamanho do grupo. Valores automáticos não são afetados pela virtualização. Mesmo que um item não seja percebido, ele ainda é contado para o tamanho total do conjunto e afeta a posição no conjunto de seus itens irmãos.

Valores automáticos serão fornecidos apenas se o aplicativo for destinado ao .NET Framework 4.8. Para aplicativos que se destinam a uma versão anterior do .NET Framework, você pode definir a Switch.UseLegacyAccessibilityFeatures.3opção AppContext, conforme mostrado no seguinte arquivo 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>

Designer de fluxo de trabalho do WF (Windows Workflow Foundation)

O designer de fluxo de trabalho inclui as seguintes alterações no .NET Framework 4.8:

  • Os usuários que utilizam o Narrador verão melhorias em rótulos de caso do FlowSwitch.

  • Os usuários que utilizam o Narrador verão melhorias em descrições de botão.

  • Usuários que escolherem temas de Alto Contraste verão melhorias na visibilidade do Designer de Fluxo de Trabalho e em seus controles, como melhores taxas de contraste entre elementos e caixas de seleção mais perceptíveis usadas para elementos de foco.

Se o seu aplicativo for destinado ao .NET Framework 4.7.2 ou uma versão anterior, você poderá aceitar essas alterações, definindo a Switch.UseLegacyAccessibilityFeatures.3opção de AppContext para false no seu arquivo de configuração de aplicativo. Para obter mais informações, consulte a seção Aproveitando os aprimoramentos de acessibilidade neste artigo.

Novidades na acessibilidade do .NET Framework 4.7.2

O .NET Framework 4.7.2 inclui novos recursos de acessibilidade nas seguintes áreas:

Windows Forms

Cores definidas pelo sistema operacional em temas de Alto Contraste

Começando no .NET Framework 4.7.2, o Windows Forms usa cores definidas pelo sistema operacional em temas de Alto Contraste. Isso afeta os seguintes controles:

Melhorias do Narrador

A partir do .NET Framework 4.7.2, o suporte ao Narrador é aprimorado da seguinte maneira:

  • Ele anuncia o valor da propriedade ToolStripMenuItem.ShortcutKeys quando anuncia o texto de um ToolStripMenuItem.

  • Ele indica quando um ToolStripMenuItem tem sua propriedade Enabled definida como false.

  • Ele fornece comentários sobre o estado de uma caixa de seleção quando a propriedade ListView.CheckBoxes está definida como true.

  • A ordem de foco do Modo de Verificação do Narrador é consistente com a ordem visual dos controles na janela de diálogo de download do ClickOnce.

Melhorias de DataGridView

A partir do .NET Framework 4.7.2, o controle DataGridView introduziu as seguintes melhorias de acessibilidade:

Melhoria das indicações visuais

  • Os controles RadioButton e CheckBox com uma propriedade Text vazia exibem um indicador de foco quando recebem o foco.

Melhoria no suporte à grade de propriedade

  • Os elementos filhos do controle PropertyGrid agora retornam true para a propriedade IsReadOnlyProperty somente quando um elemento PropertyGrid está habilitado.

  • Os elementos filho do controle PropertyGrid retornam um false para a propriedade IsEnabledProperty somente quando um elemento PropertyGrid pode ser alterado pelo usuário.

Melhoria na navegação por teclado

Windows Presentation Foundation (WPF)

Alterações nos controles CheckBox e RadioButton

No .NET Framework 4.7.1 e nas versões anteriores, os controles System.Windows.Controls.CheckBox e System.Windows.Controls.RadioButton do WPF têm visuais de foco inconsistentes e, nos temas Clássico e de Alto Contraste, têm visuais de foco incorretos. Esses problemas ocorrem quando os controles não têm nenhum conjunto de conteúdo. Isso pode dificultar a transição entre os temas e deixar o visual de foco confuso.

No .NET Framework 4.7.2, agora esses visuais são mais consistentes entre os temas e mais facilmente visíveis nos temas Clássico e de Alto Contraste.

Controles do WinForms hospedados em um aplicativo WPF

Para controles do WinForms hospedados em um aplicativo do WPF no .NET Framework 4.7.1 e versões anteriores, os usuários não poderão sair da guia da camada do WinForms se o primeiro ou o último controle da camada for o controle ElementHost do WPF. No .NET Framework 4.7.2, os usuários agora podem sair da guia da camada do WinForms.

No entanto, os aplicativos automatizados que se baseiam em foco e que nunca são escapados da camada do WinForms podem deixar de funcionar conforme o esperado.

Novidades na acessibilidade do .NET Framework 4.7.1

O .NET Framework 4.7.1 inclui novos recursos de acessibilidade nas seguintes áreas:

Windows Presentation Foundation (WPF)

Melhorias do leitor de tela

Se as melhorias de acessibilidade estiverem habilitadas, o .NET Framework 4.7.1 incluirá as seguintes melhorias que afetam os leitores de tela:

  • No .NET Framework 4.7 e em versões anteriores, os controles Expander foram divulgados pelos leitores de tela como botões. A partir do .NET Framework 4.7.1, eles são corretamente divulgados como grupos expansíveis/recolhíveis.

  • No .NET Framework 4.7 e em versões anteriores, os controles DataGridCell foram divulgados pelos leitores de tela como “personalizados”. A partir do .NET Framework 4.7.1, agora eles são corretamente divulgados como célula de grade de dados (localizada).

  • A partir do .NET Framework 4.7.1, os leitores de tela divulgam o nome de uma ComboBox editável.

  • No .NET Framework 4.7 e em versões anteriores, os controles PasswordBox eram divulgados como “nenhum item em exibição” ou, de outro modo, apresentavam um comportamento incorreto. Esse problema é corrigido a partir do .NET Framework 4.7.1.

Suporte a UIAutomation LiveRegion

Leitores de tela, como o Narrador, ajudam as pessoas a ler o conteúdo da interface do usuário de um aplicativo, normalmente, pela saída de conversão de texto em fala do conteúdo da interface do usuário que tem o foco. No entanto, se um elemento da interface do usuário for alterado e não tiver o foco, o usuário poderá não ser notificado e perder informações importantes. As regiões dinâmicas pretendem resolver esse problema. Um desenvolvedor pode usá-las para informar o leitor de tela ou qualquer outro cliente de UIAutomation de que foi feita uma alteração importante em um elemento da interface do usuário. Em seguida, o leitor de tela pode decidir como e quando informar o usuário dessa alteração.

Para dar suporte a regiões dinâmicas, as seguintes APIs foram adicionadas ao WPF:

Crie uma LiveRegion configurar a propriedade AutomationProperties.LiveSetting no elemento de interesse, conforme mostrado no seguinte exemplo:

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

Quando os dados da região dinâmica forem alterados e você precisar informar um leitor de tela, acione um evento explicitamente, conforme mostrado na amostra a seguir.

var peer = FrameworkElementAutomationPeer.FromElement(myTextBlock);

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

Alto contraste

A partir do .NET Framework 4.7.1, foram feitas melhorias de alto contraste em vários controles do WPF. Agora eles estão visíveis quando o tema HighContrast é definido. Estão incluídos:

  • Controle Expander

    O visual de foco do controle Expander agora está visível. Os visuais de teclado dos controles ComboBox, ListBox e RadioButton também estão visíveis. Por exemplo:

    Antes:

    Screenshot of the expander control with focus and no focus visual.

    Depois:

    Screenshot of the expander control with focus showing a dotted line around the control's text.

  • Controles CheckBox e RadioButton

    O texto nos controles CheckBox e RadioButton agora é de visualização mais fácil quando selecionado em temas de alto contraste. Por exemplo:

    Antes:

    Screenshot of radio and check buttons with poor text visibility on high contrast themes.

    Depois:

    Screenshot of radio and check buttons with better text visibility on high contrast themes.

  • Controle ComboBox

    A partir do .NET Framework 4.7.1, a borda de um controle ComboBox desabilitado é da mesma cor do texto desabilitado. Por exemplo:

    Antes:

    Screenshot of a disabled ComboBox with border and control text in different colors.

    Depois:

    Screenshot of a disabled ComboBox with border the same color as the control text.

    Além disso, os botões desabilitados e com foco usam a cor de tema correta.

    Antes:

    Screenshot of a black button with gray text saying Focus Me.

    Depois:

    Screenshot of a blue button with black text saying Focus Me.

    Por fim, no .NET Framework 4.7 e em versões anteriores, a configuração do estilo de um controle ComboBox como Toolbar.ComboBoxStyleKey fazia com que a seta suspensa ficasse invisível. Esse problema é corrigido a partir do .NET Framework 4.7.1. Por exemplo:

    Antes:

    Screenshot of a ComboBox control with an invisible drop-down arrow.

    Depois:

    Screenshot of a ComBoxBox control displaying the drop-down arrow.

  • Controle DataGrid

    A partir do .NET Framework 4.7.1, a seta do indicador de classificação nos controles DataGrid agora usa as cores de tema corretas. Por exemplo:

    Antes:

    Screenshot of sort indicator arrow before improvements.

    Depois:

    Screenshot of sort indicator arrow after improvements.

    Além disso, no .NET Framework 4.7 e em versões anteriores, o estilo de link padrão era alterado para uma cor incorreta ao passar o mouse nos modos de alto contraste. Isso é resolvido a partir do .NET Framework 4.7.1. Da mesma forma, as colunas da caixa de seleção DataGrid usam as cores esperadas para comentários de foco do teclado a partir do .NET Framework 4.7.1.

    Antes:

    Screenshot of a link saying Click Me! in red.

    Depois:

    Screenshot of a link saying Click Me! in yellow.

Para obter mais informações sobre as melhorias de acessibilidade do WPF no .NET Framework 4.7.1, consulte Melhorias de acessibilidade no WPF.

Melhorias de acessibilidade do Windows Forms

No .NET Framework 4.7.1, o WinForms (Windows Forms) inclui alterações de acessibilidade nas áreas a seguir.

Vídeo aprimorado no modo de Alto Contraste

Do .NET Framework 4.7.1 em diante, vários controles do WinForms oferecem uma melhor renderização nos modos de HighContrast disponíveis no sistema operacional. O Windows 10 alterou os valores de algumas cores do sistema de alto contraste e o Windows Forms é baseado na estrutura Win32 do Windows 10. Para obter a melhor experiência, execute a versão mais recente do Windows, aceite as alterações mais recentes do sistema operacional adicionando um arquivo app.manifest em um aplicativo de teste e remova o comentário da linha do sistema operacional compatível Windows 10 para obter a seguinte aparência:

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

Alguns exemplos de alterações de alto contraste incluem:

  • Marcas de seleção em itens MenuStrip são mais fáceis de serem exibidas.

  • Quando selecionados, os itens MenuStrip desabilitados são mais fáceis de serem exibidos.

  • O texto em um controle Button selecionado contrasta com a cor da seleção.

  • O texto desabilitado é mais fácil de ser lido. Por exemplo:

    Antes:

    Screenshot of an app that uses different controls running in high contrast mode before accessibility improvements.

    Depois:

    Screenshot of an app that uses different controls running in high contrast mode after accessibility improvements.

  • Melhorias de alto contraste na caixa de diálogo Exceção de Thread.

Melhor suporte ao Narrador

O Windows Forms no .NET Framework 4.7.1 inclui as seguintes melhorias de acessibilidade para o Narrador:

  • O controle MonthCalendar pode ser acessado pelo Narrador, bem como por outras ferramentas de automação da interface do usuário.

  • O controle CheckedListBox notifica o Narrador quando o estado de seleção do item foi alterado, para que o usuário seja notificado de que ele alterou o valor de um item de lista.

  • O controle DataGridViewCell relata o status somente leitura correto para o Narrador.

  • O Narrador agora pode ler o texto ToolStripMenuItem desabilitado, enquanto, anteriormente, ele ignorava itens de menu desabilitados.

Suporte aprimorado para padrões de acessibilidade de UIAutomation

A partir do .NET Framework 4.7.1, os desenvolvedores de ferramentas de tecnologia de acessibilidade podem utilizar padrões comuns de acessibilidade de API e as propriedades de vários controles WinForms. Essas melhorias de acessibilidade incluem:

Melhor experiência do navegador de propriedades

A partir do .NET Framework 4.7.1, o Windows Forms inclui:

  • Melhor navegação de teclado por meio das várias janelas de seleção suspensa.
  • Uma redução de paradas de tabulação desnecessárias.
  • Melhor relatório de tipos de controle.
  • Melhor comportamento do Narrador.

Controles da Web do ASP.NET

A partir do .NET Framework 4.7.1 e do Visual Studio 2017 versão 15.3, o ASP.NET melhora a forma como os controles da Web do ASP.NET funcionam com a tecnologia de acessibilidade no Visual Studio. As alterações incluem as seguintes:

  • Alterações para implementar padrões de acessibilidade de interface do usuário ausentes em controles como a caixa de diálogo Adicionar Campo no assistente de Exibição de Detalhes ou a caixa de diálogo Configurar ListView do assistente ListView.

  • Alterações para melhorar a exibição no modo de Alto Contraste, como o Editor de Campos do Pager de Dados.

  • Alterações para melhorar as experiências de navegação por teclado para controles como a caixa de diálogo Campos no assistente Editar Campos do Pager do controle DataPager, a caixa de diálogo Configurar ObjectContext ou a caixa de diálogo Configurar Seleção de Dados do assistente Configurar Fonte de Dados.

Ferramentas do SDK do .NET

A Ferramenta Configuration Editor (SvcConfigEditor.exe) e a Ferramenta Service Trace Viewer (SvcTraceViewer.exe) foram aprimoradas com a correção de problemas variados de acessibilidade. A maioria eram problemas pequenos, como um nome que não está definido ou certos padrões de automação de interface do usuário implementados incorretamente. Embora muitos usuários não estejam cientes desses valores incorretos, os clientes que usam tecnologias adaptativas como leitores de tela considerarão essas ferramentas de SDK mais acessíveis.

Essas melhorias alteram alguns comportamentos anteriores, como a ordem de foco do teclado.

Designer de Fluxo de Trabalho do WF (Windows Workflow Foundation)

As alterações de acessibilidade no Designer de Fluxo de Trabalho incluem as seguintes:

  • A ordem de tabulação é alterada para a esquerda para a direita e de cima para baixo em alguns controles:

  • Mais funções estão disponíveis por meio do teclado:

    • Ao editar as propriedades de uma atividade, grupos de propriedades podem ser recolhidos pelo teclado na primeira vez em que são colocados em foco.

    • Ícones de aviso podem ser acessados por teclado.

    • O botão Mais Propriedades na janela Propriedades pode ser acessado pelo teclado.

    • Usuários do teclado podem acessar os itens de cabeçalho nos painéis Argumentos e Variáveis do Designer de Fluxo de Trabalho.

  • Melhor visibilidade de itens com foco, como ao:

    • Adicionar linhas às grades de dados usadas pelo Designer de Fluxo de Trabalho e por designers de atividades.

    • Percorrer campos nas atividades ReceiveReply e SendReply.

    • Definir valores padrão para variáveis ou argumentos

  • Agora, leitores de tela podem reconhecer corretamente:

    • Pontos de interrupção definidos no Designer de Fluxo de Trabalho.

    • As atividades FlowSwitch<T>, FlowDecision e CorrelationScope.

    • O conteúdo da atividade Receive.

    • O Tipo de Destino da atividade InvokeMethod.

    • A caixa de combinação Exceção e a seção Finalmente na atividade TryCatch.

    • A caixa de combinação Tipo de Mensagem, o divisor na janela Adicionar Inicializadores de Correlação, a janela Definição de Conteúdo e a janela de Definição de CorrelatesOn nas atividades de mensagens (Receive, Send, SendReply e ReceiveReply).

    • Transições de máquinas de estado e destinos de transição.

    • Anotações e conectores em atividades FlowDecision.

    • Os menus de contexto (clique com o botão direito do mouse) para atividades.

    • Os editores de valor de propriedade, o botão Limpar Pesquisa, os botões de classificação Por Categoria e Ordem Alfabética e a caixa de diálogo Editor de Expressão na grade de propriedades.

    • A porcentagem de zoom no Designer de Fluxo de Trabalho.

    • O separador nas atividades Parallel e Pick.

    • A atividade InvokeDelegate.

    • A janela Selecionar Tipos para atividades de dicionário (Microsoft.Activities.AddToDictionary<TKey,TValue>, Microsoft.Activities.RemoveFromDictionary<TKey,TValue> etc.).

    • A janela Procurar e Selecionar um Tipo .NET.

    • Trilhas de navegação no Designer de Fluxo de Trabalho.

  • Usuários que escolherem temas de Alto Contraste verão muitas melhorias na visibilidade do Designer de Fluxo de Trabalho e em seus controles, como melhores taxas de contraste entre elementos e caixas de seleção mais perceptíveis usadas para elementos de foco.

Confira também