O que há de novo na acessibilidade no .NET Framework

O .NET Framework visa tornar os aplicativos mais acessíveis para seus usuários. Os recursos de acessibilidade permitem que um aplicativo forneça uma experiência adequada para os usuários de Tecnologia Assistiva. Começando com o .NET Framework 4.7.1, o .NET Framework inclui um grande número de melhorias de acessibilidade que permitem aos desenvolvedores criar aplicativos acessíveis.

Comutadores de acessibilidade

Você pode configurar seu aplicativo para optar por recursos de acessibilidade se ele tiver como destino o .NET Framework 4.7 ou uma versão anterior, mas estiver sendo executado no .NET Framework 4.7.1 ou posterior. Você também pode configurar seu aplicativo para usar recursos herdados (e não aproveitar os recursos de acessibilidade) se ele tiver como alvo o .NET Framework 4.7.1 ou posterior. Cada versão do .NET Framework que inclui recursos de acessibilidade tem uma opção de acessibilidade específica da versão, que você adiciona ao <AppContextSwitchOverrides> elemento na <runtime> seção do arquivo de configuração do aplicativo. A seguir estão as opções suportadas:

Versão Switch
.NET Framework 4.7.1 "Switch.UseLegacyAccessibilityFeatures"
.NET Framework 4.7.2 "Switch.UseLegacyAccessibilityFeatures.2"
.NET Framework 4.8 "Switch.UseLegacyAccessibilityFeatures.3"
Atualização cumulativa de 11 de agosto de 2020-KB4569746 para o .NET Framework 4.8 "Switch.UseLegacyAccessibilityFeatures.4"
.NET Framework 4.8.1 "Switch.UseLegacyAccessibilityFeatures.5"

Tirar partido das melhorias de acessibilidade

Os novos recursos de acessibilidade são habilitados por padrão para aplicativos destinados ao .NET Framework 4.7.1 ou posterior. Além disso, os aplicativos destinados a uma versão anterior do .NET Framework, mas que estão sendo executados no .NET Framework 4.7.1 ou posterior, podem desativar comportamentos de acessibilidade herdados (e, assim, aproveitar as melhorias de acessibilidade) adicionando opções ao <AppContextSwitchOverrides> elemento na <runtime> seção do arquivo de configuração do aplicativo e definindo seu valor como false. O trecho a seguir mostra como aceitar os aprimoramentos de acessibilidade que foram 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>

Se você optar por aceitar recursos de acessibilidade em uma versão posterior do .NET Framework, você também deve aceitar explicitamente os recursos de versões anteriores. Para configurar seu aplicativo para aproveitar os aprimoramentos de acessibilidade no .NET Framework 4.7.1 e 4.7.2, adicione o seguinte <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 seu aplicativo para aproveitar os aprimoramentos 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 <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;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 recursos de acessibilidade adicionando opções ao <AppContextSwitchOverrides> elemento na <runtime> seção do arquivo de configuração do aplicativo e definindo seu valor como true. Por exemplo, a configuração a seguir exclui 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>

O que há de novo na acessibilidade no .NET Framework 4.8.1

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

Windows Forms

Representações UIA adicionadas e melhoradas

Antes do .NET Framework 4.8.1, o Windows Forms não tinha suporte para uma variedade de padrões de UIA para oferecer suporte à tecnologia assistiva para interagir com aplicativos. Essa deficiência pode fazer com que o Narrador ou outros leitores de tela relatem informações incompletas ou incorretas. Também pode afetar funcionalidades importantes, como mover um cursor pelo texto em um TextBox controle. 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 assistiva uma experiência de interação com aplicativos muito mais rica.

  • Adicionado suporte para o padrão expandir/recolher UIA para o DateTimePicker controle.
  • Adicionado suporte UIA para o MonthCalendar controle. Agora, ferramentas de tecnologia assistiva, como o Narrador, podem navegar pelas datas individuais no controle.
  • Suporte a padrão de texto implementado para todos os controles baseados em texto, incluindo o TextBoxMaskedTextBox, , PropertyGrid controle de edição, DataGridViewTextBoxCell, ToolStripTextBoxe DomainUpDown controles.
  • ToolTip agora segue as diretrizes WCAG2.1 para ser persistente, descartável e pairável no Windows 11. As alterações no comportamento da dica de ferramenta são limitadas aos sistemas Windows 11 que têm o .NET Framework 4.8.1 instalado e só se aplicam a aplicativos em que um tempo limite não foi definido para a dica de ferramenta. As dicas de ferramentas que persistem podem ser descartadas com a tecla Esc ou Ctrl ou navegando para um controle com outro conjunto de dicas de ferramentas.

Várias correções de bugs para recursos de acessibilidade existentes

  • O Narrador agora pode se concentrar em um controle vazio DataGridView .
  • Foi resolvido um problema que fazia com que os leitores de ecrã contassem colunas ocultas ao anunciar a contagem de colunas num DataGridView controlo.
  • Foi resolvido um problema que fazia com que o DataGridView ignorasse as configurações de fonte definidas no DataGridviewCellStyle se o formulário subjacente tivesse uma Font propriedade diferente do DefaultFont.
  • Atualizada a AccessibleName propriedade das barras de rolagem internas do DataGridView controle para remover o texto "ScrollBar".
  • Corrigida a cor de a DataGridViewLinkCell quando a célula é selecionada.
  • Corrigido um problema com controles personalizados DataGridView onde não ControlType havia ou LocalizedControlType fornecia elementos personalizados DataGridViewCell .
  • Atualizada a relação de luminosidade para 3,5:1 para ToolStripButton controles definidos ToolStripRenderMode como System.
  • Navegação de teclado melhorada em um ToolStrip quando o elemento é um ToolStripComboBox tipo.
  • Atualizada a cor de fundo do modo de ToolStripButton alto contraste.
  • Garantiu que há um retângulo delimitador reportado à tecnologia assistiva para o ToolStripSeparator.
  • Corrigido um problema que podia fazer com que o leitor de ecrã JAWS falhasse ao ler o PropertyGrid controlo.
  • Assegurado que a árvore de hierarquia UIA para um PropertyGrid controle seja atualizada quando uma entrada complexa como Font é expandida. Também garantiu que a árvore é atualizada corretamente quando a entrada é recolhida e não está mais visível.
  • PropertyGrid As categorias agora têm um tipo de controle localizado de PropertyGrid category.
  • Corrigido ComboBox um problema que podia fazer com que a aplicação falhasse em Informações de Acessibilidade para Windows.
  • Atualizada a cor da borda para que o Button tenha mais contraste nas cores padrão.
  • Ferramentas de tecnologia assistiva habilitadas para acessar os ControlBox botões de um formulário filho MDI maximizado.
  • A AccessibleName propriedade de um DomainUpDown controle tem um novo valor padrão de uma 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.
  • Atualizada a AccessibleName propriedade do botão Imprimir no PrintPreviewDialog de "Imprimir botão" para "Imprimir" para evitar redundância quando os leitores de tela anunciam o controle e seu tipo.
  • Controles de lista UIA atualizados para remover um elemento de lista vazio quando uma PropertyGrid célula do tipo ComboBox é fechada e não está mais visível.

Windows Presentation Foundation (WPF)

Melhorias no tratamento de dicas de ferramentas acessíveis

Nesta versão, o WPF melhorou a experiência garantindo que uma dica de ferramenta na janela atual possa ser facilmente descartada usando a tecla Esc, a tecla Ctrl (por si só) ou pela combinação Ctrl+Shift+F10. O escopo da chave Esc foi reduzido nesta versão para se aplicar apenas à janela atual, quando anteriormente ela seria aplicada a qualquer dica de ferramenta aberta no aplicativo. Por padrão, as dicas de ferramentas do WPF seguirão as diretrizes das WCAG2.1 para serem persistentes, descartáveis e passíveis de hover.

O que há de novo em acessibilidade na Atualização Cumulativa de 11 de agosto de 2020 para o .NET Framework 4.8

A Atualização Cumulativa de 11 de agosto de 2020-KB4569746 para o .NET Framework 4.8 inclui novos recursos de acessibilidade no Windows Forms:

  • Resolve um problema com o anúncio PropertyGrid de itens de controlo e o estado expandido/recolhido de uma categoria pelos leitores de ecrã.

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

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

  • Aborda propriedades acessíveis de retângulo delimitador para os PropertyGridView controles.

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

O que há de novo na acessibilidade no .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 para LiveRegions e Eventos de Notificação a muitos controles comumente usados. Ele também adiciona suporte para dicas de ferramentas quando um usuário navega para um controle usando o teclado.

Suporte UIA LiveRegions em Labels e StatusStrips

O UIA LiveRegions permite que os desenvolvedores de aplicativos notifiquem os leitores de tela sobre uma alteração de texto em um controle localizado além do local onde o usuário está trabalhando. Isso é útil, por exemplo, para um StatusStrip controle que mostra um status de conexão. Se a conexão for interrompida e o status mudar, o desenvolvedor pode querer notificar o leitor de tela.

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

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

…
Label1.Text = "Ready!";

O Narrador anuncia "Pronto" independentemente de onde o usuário está interagindo com o aplicativo.

Você também pode implementar o seu UserControl como 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 da UIA

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

O exemplo a seguir gera o evento Notification:

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 aparecer movendo um ponteiro do mouse para o controle. A partir do .NET Framework 4.8, um usuário de teclado pode acionar a dica de ferramenta de um controle focando o controle usando uma tecla Tab ou teclas de seta com ou sem teclas modificadoras. Esse aprimoramento de acessibilidade específico requer uma opção adicional do 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 mostra a dica de ferramenta quando o usuário selecionou um botão com o teclado.

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

Windows Presentation Foundation (WPF)

Começando com o .NET Framework 4.8, o WPF inclui várias melhorias de acessibilidade.

Os 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. Interfaces de utilizador que contenham elementos com uma Visibilidade ou Visibility.Hidden que possam ser deturpados pelos leitores de Visibility.Collapsed ecrã se forem anunciados ao utilizador. A partir do .NET Framework 4.8, o WPF não inclui mais elementos recolhidos ou ocultos na Exibição de Controle da árvore UIAutomation, portanto, os leitores de tela não podem mais anunciar esses elementos.

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

No .NET Framework 4.7.2, o WPF adicionou a capacidade de desenhar TextBox e PasswordBox selecionar texto sem usar a camada Adorner. A cor de primeiro plano do texto selecionado neste cenário foi ditada por SystemColors.HighlightTextBrush.

O .NET Framework 4.8 adiciona uma nova propriedade, SelectionTextBrush, que permite aos desenvolvedores selecionar o pincel específico para o texto selecionado ao usar a seleção de texto não baseada em Adorner. Essa propriedade funciona apenas em TextBoxBasecontroles derivados e o PasswordBox controle em aplicativos WPF com seleção de texto não baseada em Adorner habilitada. Ele não funciona no RichTextBox controle. Se a seleção de texto não baseada em Adorner não estiver habilitada, essa propriedade será ignorada.

Para usar essa propriedade, basta adicioná-la ao seu código XAML e usar o pincel ou a associação apropriados. 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 e SelectionTextBrush para gerar qualquer combinação de cores de plano de SelectionBrush fundo e primeiro plano que julgar apropriada.

Suporte para a propriedade UIAutomation ControllerFor

A propriedade de ControllerFor UIAutomation retorna uma matriz de elementos de automação que são manipulados pelo elemento de automação que suporta essa propriedade. Esta propriedade é comumente usada para Auto-sugerir acessibilidade. ControllerFor é usado quando um elemento de automação afeta um ou mais segmentos da interface do usuário do aplicativo ou da área de trabalho. Caso contrário, é difícil associar o impacto da operação de controle aos elementos da interface do usuário. Esse recurso adiciona a capacidade de os controles fornecerem um valor para a ControllerFor propriedade.

O .NET Framework 4.8 adiciona um novo método virtual, GetControlledPeersCore(). Para fornecer um valor para a propriedade, simplesmente substitua ControllerFor esse método e retorne a List<AutomationPeer> para os controles que estão sendo manipulados por isso 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 passa 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 optar por participar usando as Switch.UseLegacyAccessibilityFeatures.3 opções e Switch.UseLegacyToolTipDisplayAppContext . A seguir está um arquivo de configuração de aplicativo de exemplo:

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

Uma vez ativado, todos os controles que contêm uma dica de ferramenta a exibem assim que o controle recebe o foco do teclado. A dica de ferramenta pode ser descartada ao longo do tempo ou quando o foco do teclado muda. Os usuários também podem descartar a dica de ferramenta manualmente usando um novo atalho de teclado, Ctrl+Shift+F10. Depois que a dica de ferramenta for descartada, ela poderá ser exibida novamente usando o mesmo atalho de teclado.

Nota

As dicas de ferramentas da faixa de opções nos Ribbon controles não serão exibidas no foco do teclado, elas só serão exibidas através do atalho do teclado.

Adicionado suporte para as propriedades UIAutomation SizeOfSet e PositionInSet

O Windows 10 introduziu duas novas propriedades SizeOfSet UIAutomation e PositionInSet, que são usadas por aplicativos para descrever a contagem de itens em um conjunto. Os aplicativos cliente UIAutomation, como leitores de tela, podem consultar um aplicativo para essas propriedades e anunciar uma representação precisa da interface do 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 AutomationProperties.SizeOfSet de dependência e AutomationProperties.PositionInSet. Um desenvolvedor pode usar 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>
    
  • Substituindo os métodos virtuais AutomationPeer.

    Os GetSizeOfSetCore() métodos virtuais foram GetPositionInSetCore() adicionados à AutomationPeer aula. Um desenvolvedor pode fornecer valores para SizeOfSet e PositionInSet substituindo esses 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 em ItemsControl instâncias fornecem um valor para essas propriedades automaticamente sem ação adicional do desenvolvedor. Se um ItemsControl é agrupado, a coleção de grupos é representada como um conjunto, e cada grupo é contado como um conjunto separado, com cada item dentro desse grupo fornecendo sua posição dentro desse grupo, bem como o tamanho do grupo. Os valores automáticos não são afetados pela virtualização. Mesmo que um item não seja realizado, ele ainda é contado para o tamanho total do conjunto e afeta a posição no conjunto de seus itens irmãos.

Os valores automáticos só são fornecidos se o aplicativo tiver como destino o .NET Framework 4.8. Para aplicativos destinados 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 Windows Workflow Foundation (WF)

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

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

  • Os usuários que usam o Narrador verão melhorias nas descrições dos botões.

  • Os usuários que escolherem temas de Alto Contraste verão melhorias na visibilidade do Designer de Fluxo de Trabalho e seus controles, como melhores relações de contraste entre elementos e caixas de seleção mais percetíveis usadas para elementos de foco.

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

O que há de novo na acessibilidade no .NET Framework 4.7.2

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

Windows Forms

Cores definidas pelo SO em temas de Alto Contraste

A partir do .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 no narrador

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

  • Ele anuncia o valor do ToolStripMenuItem.ShortcutKeys imóvel ao anunciar o texto de um ToolStripMenuItemarquivo .

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

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

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

Melhorias do DataGridView

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

Pistas visuais melhoradas

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

Suporte melhorado à rede de propriedades

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

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

Navegação por teclado melhorada

Windows Presentation Foundation (WPF)

Alterações nos controles CheckBox e RadioButton

No .NET Framework 4.7.1 e versões anteriores, o WPF System.Windows.Controls.CheckBox e System.Windows.Controls.RadioButton os controles têm visuais de foco inconsistentes e, em temas clássicos e de alto contraste, incorretos. Esses problemas ocorrem nos casos em que os controles não têm qualquer conjunto de conteúdo. Isso pode tornar a transição entre temas confusa e o foco visual difícil de ver.

No .NET Framework 4.7.2, esses visuais agora são mais consistentes entre temas e mais facilmente visíveis em temas clássicos e de alto contraste.

Controles WinForms hospedados em um aplicativo WPF

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

No entanto, aplicativos automatizados que dependem do foco nunca escapando da camada WinForms podem não funcionar mais como esperado.

O que há de novo na acessibilidade no .NET Framework 4.7.1

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

Windows Presentation Foundation (WPF)

Melhorias no leitor de tela

Se os aprimoramentos de acessibilidade estiverem habilitados, o .NET Framework 4.7.1 incluirá os seguintes aprimoramentos que afetam os leitores de tela:

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

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

  • A partir do .NET Framework 4.7.1, os leitores de tela anunciam o nome de um arquivo ComboBox.

  • No .NET Framework 4.7 e versões anteriores, PasswordBox os controles eram anunciados como "nenhum item em exibição" ou tinham outro comportamento incorreto. Esse problema é corrigido a partir do .NET Framework 4.7.1.

Suporte UIAutomation LiveRegion

Os leitores de tela, como o Narrador, ajudam as pessoas a ler o conteúdo da interface do usuário de um aplicativo, geralmente 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 pode não ser notificado e pode perder informações importantes. As regiões vivas visam resolver este problema. Um desenvolvedor pode usá-los para informar o leitor de tela ou qualquer outro cliente UIAutomation que uma alteração importante foi feita em um elemento da interface do usuário. O leitor de ecrã pode então decidir como e quando informar o utilizador desta alteração.

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

Você pode criar uma LiveRegion definindo a propriedade AutomationProperties.LiveSetting no elemento de interesse, conforme mostrado no exemplo a seguir:

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

Quando os dados na região ativa são alterados e você precisa informar um leitor de tela, você gera explicitamente um evento, conforme mostrado no exemplo 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, melhorias no alto contraste foram feitas em vários controles WPF. Eles agora são visíveis quando o HighContrast tema é definido. Estes são, entre outros:

  • Controlo Expander

    O visual de foco para o Expander controle agora está visível. Os visuais do teclado para ComboBox,ListBox, e RadioButton controles também sã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.

  • CheckBox e RadioButton controlos

    O texto nos CheckBox controles e RadioButton agora é mais fácil de ver 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.

  • Controlo ComboBox

    A partir do .NET Framework 4.7.1, a borda de um controle desabilitado ComboBox é da mesma cor que o 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 desativados e focados usam a cor correta do tema.

    Antes:

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

    Depois:

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

    Finalmente, no .NET Framework 4.7 e versões anteriores, definir o estilo de um ComboBox controle para Toolbar.ComboBoxStyleKey fazer 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.

  • Controlo DataGrid

    A partir do .NET Framework 4.7.1, a seta indicadora de classificação nos DataGrid controles agora usa 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 versões anteriores, o estilo de link padrão foi alterado para uma cor incorreta ao passar o mouse em modos de alto contraste. Isso é resolvido a partir do .NET Framework 4.7.1. Da mesma forma, DataGrid as colunas da caixa de seleção usam as cores esperadas para comentários sobre o 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 melhorias de acessibilidade do WPF no .NET Framework 4.7.1, consulte Melhorias de acessibilidade no WPF.

Melhorias na acessibilidade do Windows Forms

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

Ecrã melhorado no modo de Alto Contraste

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

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

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

  • As marcas de verificação nos MenuStrip itens são mais fáceis de visualizar.

  • Quando selecionados, os itens desativados MenuStrip são mais fáceis de visualizar.

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

  • O texto desativado é mais fácil de ler. 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.

Suporte melhorado ao Narrador

Windows Forms no .NET Framework 4.7.1 inclui os seguintes aprimoramentos de acessibilidade para o Narrador:

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

  • O CheckedListBox controle notifica o Narrador quando o estado de verificação de um item é alterado para que o usuário seja notificado de que alterou o valor de um item de lista.

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

  • O Narrador agora pode ler texto desativado ToolStripMenuItem , enquanto anteriormente ignorava itens de menu desativados.

Suporte aprimorado para padrões de acessibilidade UIAutomation

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

Experiência melhorada no navegador da propriedade

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

  • Melhor navegação pelo teclado através das várias janelas de seleção suspensas.
  • Uma redução de paradas de tabulação desnecessárias.
  • Melhor comunicação dos tipos de controlo.
  • Comportamento melhorado do narrador.

ASP.NET controles da Web

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

  • Alterações para implementar padrões de acessibilidade da interface do usuário ausentes nos controles, como a caixa de diálogo Adicionar campo no assistente para 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 pelo 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 Configuration Editor Tool (SvcConfigEditor.exe) e a Service Trace Viewer Tool (SvcTraceViewer.exe) foram melhoradas através da correção de vários problemas de acessibilidade. A maioria deles eram pequenos problemas, como um nome não sendo definido ou certos padrões de automação da interface do usuário não sendo implementados corretamente. Embora muitos usuários não estejam cientes desses valores incorretos, os clientes que usam tecnologias assistenciais, como leitores de tela, acharão essas ferramentas SDK mais acessíveis.

Esses aprimoramentos alteram alguns comportamentos anteriores, como a ordem de foco do teclado.

Windows Workflow Foundation (WF) Workflow Designer

As alterações de acessibilidade no Designer de Fluxo de Trabalho incluem o seguinte:

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

  • Mais funções estão disponíveis através do teclado:

    • Ao editar as propriedades de uma atividade, os grupos de propriedades podem ser recolhidos pelo teclado na primeira vez que estiverem focados.

    • Os ícones de aviso podem ser acessados pelo teclado.

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

    • Os 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 quando:

    • Adicionar linhas a grades de dados usadas pelo Designer de Fluxo de Trabalho e designers de atividades.

    • Tabulação pelos campos no ReceiveReply e SendReply atividades.

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

  • Os leitores de tela agora podem reconhecer corretamente:

    • Pontos de interrupção definidos no designer de fluxo de trabalho.

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

    • O conteúdo da Receive atividade.

    • O Tipo de Destino para a InvokeMethod atividade.

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

    • 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 Definição CorrelatesOn nas atividades de mensagens (Receive, Send, SendReplye ReceiveReply).

    • Transições de máquina de estado e destinos de transições.

    • Anotações e conectores em FlowDecision atividades.

    • 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 Por categoria e Classificação alfabética e a caixa de diálogo Editor de expressões na grade de propriedades.

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

    • O separador em Parallel e Pick atividades.

    • A InvokeDelegate atividade.

    • 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 Tipo .NET.

    • Trilha no Designer de Fluxo de Trabalho.

  • Os usuários que escolherem temas de Alto Contraste verão muitas melhorias na visibilidade do Designer de Fluxo de Trabalho e seus controles, como melhores relações de contraste entre elementos e caixas de seleção mais percetíveis usadas para elementos de foco.

Consulte também