Nouveautés concernant l’accessibilité dans .NET Framework

.NET Framework vise à rendre les applications plus accessibles pour vos utilisateurs. Les fonctionnalités d’accessibilité permettent à une application de fournir une expérience appropriée pour les utilisateurs des technologies d’assistance. À partir de la version 4.7.1, .NET Framework inclut un grand nombre d’améliorations en termes d’accessibilité, qui permettent aux développeurs de créer des applications accessibles.

Commutateurs d’accessibilité

Si votre application cible .NET Framework 4.7 ou une version antérieure, mais est exécutée sur .NET Framework 4.7.1 ou une version ultérieure, vous pouvez la configurer pour qu’elle active les fonctionnalités d’accessibilité. Si elle cible .NET Framework 4.7.1 ou une version ultérieure, vous pouvez également la configurer afin qu’elle utilise les fonctionnalités héritées (et ainsi, qu’elle n’active pas les fonctionnalités d’accessibilité). Chaque version de .NET Framework qui inclut des fonctionnalités d’accessibilité possède son propre commutateur d’accessibilité, que vous ajoutez à l’élément <AppContextSwitchOverrides> dans la section <runtime> du fichier de configuration de l’application. Les commutateurs pris en charge sont les suivants :

Version Commutateur
.NET Framework 4.7.1 "Switch.UseLegacyAccessibilityFeatures"
.NET Framework 4.7.2 "Switch.UseLegacyAccessibilityFeatures.2"
.NET Framework 4.8 "Switch.UseLegacyAccessibilityFeatures.3"
11 août, Mise à jour cumulative 2020-KB4569746 de .NET Framework 4.8 "Switch.UseLegacyAccessibilityFeatures.4"
.NET Framework 4.8.1 "Switch.UseLegacyAccessibilityFeatures.5"

Activation des nouvelles fonctionnalités d’accessibilité

Les nouvelles fonctionnalités d’accessibilité sont activées par défaut pour les applications qui ciblent .NET Framework 4.7.1 ou version ultérieure. De plus, pour les applications qui ciblent une version antérieure de .NET Framework mais qui sont exécutées sur .NET Framework 4.7.1 ou une version ultérieure, vous pouvez désactiver les comportements d’accessibilité hérités (et ainsi, utiliser les nouvelles fonctionnalités d’accessibilité) en ajoutant des commutateurs à l’élément <AppContextSwitchOverrides> dans la section <runtime> du fichier de configuration de l’application et en les définissant sur la valeur false. L’extrait de code ci-dessous montre comment activer les nouvelles fonctionnalités d’accessibilité introduites dans .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 vous choisissez d’activer les fonctionnalités d’accessibilité d’une version ultérieure de .NET Framework, vous devez aussi activer explicitement les fonctionnalités des versions antérieures. Pour configurer votre application afin qu’elle utilise les nouvelles fonctionnalités d’accessibilité des deux versions de .NET Framework (4.7.1 et 4.7.2), ajoutez l’élément <AppContextSwitchOverrides> suivant :

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

Pour configurer votre application afin qu’elle utilise les nouvelles fonctionnalités d’accessibilité de .NET Framework 4.7.1, 4.7.2, 4.8 et la mise à jour cumulative d’août 2020 de .NET Framework 4.8, ajoutez l’élément <AppContextSwitchOverrides> suivant :

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

Restauration du comportement hérité

Pour les applications ciblant la version 4.7.1 ou des versions ultérieures de .NET Framework, vous pouvez désactiver les fonctionnalités d’accessibilité en ajoutant des commutateurs à l’élément <AppContextSwitchOverrides> dans la section <runtime> du fichier de configuration de l’application et en les définissant leur valeur sur true. Par exemple, la configuration suivante active les nouvelles fonctionnalités d’accessibilité de .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>

Nouveautés concernant l’accessibilité dans .NET Framework 4.8.1

.NET Framework 4.8.1 apporte de nouvelles fonctionnalités d’accessibilité dans les domaines suivants :

Windows Forms

Ajout et amélioration des représentations UIA

Avant .NET Framework 4.8.1, Windows Forms ne prenait pas en charge une gamme de modèles UIA pour prendre en charge la technologie d’assistance permettant d’interagir avec les applications. Cette lacune pouvait amener le Narrateur ou d’autres lecteurs d’écran à signaler des informations incomplètes ou incorrectes. Cela pouvait également affecter des fonctionnalités importantes, comme le déplacement d’un curseur dans le texte d’un contrôle TextBox. Avec .NET Framework 4.8.1, tous les modèles requis pour les contrôles communs ont été implémentés. Cette nouvelle fonctionnalité offre aux utilisateurs de technologies d’assistance une expérience d’interaction d’application beaucoup plus riche.

  • Ajout de la prise en charge du modèle de développement/réduction UIA au contrôle DateTimePicker.
  • Ajout de la prise en charge d’UIA au contrôle MonthCalendar. Désormais, les outils de technologie d’assistance comme le Narrateur peuvent parcourir les dates individuelles dans le contrôle.
  • Prise en charge du modèle de texte implémentée pour tous les contrôles basés sur du texte, notamment les contrôles de modification TextBox, MaskedTextBox, PropertyGrid, et les contrôles DataGridViewTextBoxCell, ToolStripTextBox et DomainUpDown.
  • ToolTip suit maintenant les recommandations de WCAG2.1 pour être persistant, masquable et pointable sur Windows 11. Les modifications apportées au comportement de l’info-bulle sont limitées aux systèmes Windows 11 sur lesquels .NET Framework 4.8.1 est installé et s’appliquent uniquement aux applications pour lesquelles aucun délai d’expiration n’a été défini pour l’info-bulle. Les info-bulles persistantes peuvent être masquées avec la touche Échap ou Ctrl, ou en accédant à un contrôle avec un autre ensemble d’info-bulles.

Divers correctifs de bogues pour les fonctionnalités d’accessibilité existantes

  • Le Narrateur peut maintenant se focaliser sur un contrôle DataGridView vide.
  • Résolution d’un problème qui empêchait les lecteurs d’écran de compter les colonnes masquées lors de l’annonce du nombre de colonnes dans un contrôle DataGridView.
  • Résolution d’un problème qui faisait que DataGridView ignorait les paramètres de police définis dans DataGridviewCellStyle si le formulaire sous-jacent avait une propriété Font différente de DefaultFont.
  • Mise à jour de la propriété AccessibleName des barres de défilement internes du contrôle DataGridView pour supprimer le texte « ScrollBar ».
  • Correction de la couleur d’un DataGridViewLinkCell lorsque la cellule est sélectionnée.
  • Correction d’un problème lié aux contrôles de DataGridView personnalisés où aucun ControlType ni aucun LocalizedControlType n’était fourni pour les éléments DataGridViewCell personnalisés.
  • Mise à jour du rapport de luminosité sur 3,5:1 pour les contrôles ToolStripButton qui ont ToolStripRenderMode défini sur System.
  • Amélioration de la navigation au clavier dans un ToolStrip lorsque l’élément est un type ToolStripComboBox.
  • Mise à jour de la couleur d’arrière-plan du ToolStripButton en mode contraste élevé.
  • Garantie qu’un rectangle englobant est signalé à la technologie d’assistance pour le ToolStripSeparator.
  • Correction d’un problème qui pouvait entraîner le blocage du lecteur d’écran JAWS lors de la lecture du contrôle PropertyGrid.
  • Garantie que l’arborescence de hiérarchie UIA pour un contrôle PropertyGrid est mise à jour lorsqu’une entrée complexe comme Font est développée. Garantie que l’arborescence est correctement mise à jour lorsque l’entrée est réduite et n’est plus visible.
  • Les catégories PropertyGrid ont désormais un type de contrôle localisé de PropertyGrid category.
  • Correction d’un problème avec le ComboBox qui pouvait provoquer le blocage de l’application sous Accessibility Insights pour Windows.
  • Mise à jour de la couleur de bordure pour Button afin d’avoir plus de contraste dans les couleurs par défaut.
  • Outils de technologie d’assistance activés pour accéder aux boutons ControlBox d’un formulaire enfant MDI agrandi.
  • La propriété AccessibleName d’un contrôle DomainUpDown a une nouvelle valeur par défaut de chaîne vide. La chaîne vide encourage les développeurs à créer un nom explicite plutôt que d’accepter la valeur par défaut non vide précédente.
  • Mise à jour de la propriété AccessibleName du bouton Imprimer dans le PrintPreviewDialog de « Bouton Imprimer » en « Imprimer » pour éviter la redondance lorsque les lecteurs d’écran annoncent le contrôle et son type.
  • Contrôles de liste UIA mis à jour pour supprimer un élément de liste vide lorsqu’une cellule PropertyGrid de type ComboBox est fermée et n’est plus visible.

Windows Presentation Foundation (WPF)

Améliorations de la gestion des info-bulles accessibles

Dans cette version, WPF a amélioré l’expérience en s’assurant qu’une info-bulle dans la fenêtre actuelle peut facilement être masquée à l’aide de la touche Échap, de la touche Ctrl (seule) ou de la combinaison Ctrl+Maj+F10. L’étendue de la clé Échap a été réduite dans cette version pour s’appliquer uniquement à la fenêtre active, alors qu’auparavant elle s’était appliquée à n’importe quelle info-bulle ouverte dans l’application. Par défaut, les info-bulles WPF suivent les recommandations de WCAG2.1 pour être persistantes, masquables et pointables.

Nouveautés en matière d’accessibilité dans la mise à jour cumulative du 11 août 2020 de .NET Framework 4.8

La mise à jour cumulative KB4569746 du 11 août 2020 de .NET Framework 4.8 introduit de nouvelles fonctionnalités d’accessibilité dans Windows Forms :

  • Résolution d’un problème lié à l’annonce des éléments de contrôle PropertyGrid et de l’état développé/réduit d’une catégorie par les lecteurs d’écran.

  • Mise à jour des modèles accessibles du contrôle PropertyGrid et de ses éléments internes.

  • Mise à jour des noms accessibles des éléments internes du contrôle PropertyGrid afin qu’ils soient correctement annoncés par les lecteurs d’écran.

  • Traitement des propriétés accessibles du rectangle englobant pour les contrôles PropertyGridView.

  • Annonce appropriée par les lecteurs d’écran de l’état développé/réduit des cellules de la zone de liste modifiable DataGridView.

Nouveautés concernant l’accessibilité dans .NET Framework 4.8

.NET Framework 4.8 apporte de nouvelles fonctionnalités d’accessibilité dans les domaines suivants :

Windows Forms

Dans .NET Framework 4.8, Windows Forms prend en charge les zones dynamiques et les événements de notification pour de nombreux contrôles couramment utilisés. Il prend également en charge les info-bulles lorsqu’un utilisateur accède à un contrôle à l’aide du clavier.

Prise en charge des zones dynamiques UIA dans les étiquettes et les StatusStrips

Les zones dynamiques UIA permettent aux développeurs d’applications d’informer les lecteurs d’écran lorsqu’une modification a été apportée au texte d’un contrôle qui se trouve dans un emplacement autre que celui où l’utilisateur travaille actuellement. Cela s’avère utile, par exemple, lorsqu’un contrôle StatusStrip affiche l’état d’une connexion. Si la connexion est supprimée et l’état change, le développeur peut souhaiter en informer le lecteur d’écran.

À compter de .NET Framework 4.8, Windows Forms implémente les zones dynamiques UIA pour les contrôles Label et StatusStrip. Par exemple, le code suivant utilise la zone dynamique dans un contrôle Label nommé label1 :

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

…
Label1.Text = "Ready!";

Le narrateur annonce « Prêt », quel que soit l’endroit où l’utilisateur interagit avec l’application.

Vous pouvez également implémenter votre UserControl comme une zone dynamique :

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

Événements de notification UIA

L’événement de notification UIA, qui a fait sa première apparition dans Windows 10 Fall Creators Update, permet à votre application de déclencher un événement UIA. Ainsi, le narrateur émet simplement une annonce en fonction du texte que vous fournissez avec l’événement, sans avoir besoin d’un contrôle correspondant dans l’interface utilisateur. Dans certains scénarios, il s’agit d’une méthode simple pour améliorer considérablement l’accessibilité de votre application. Elle peut également être utile pour informer de la progression d’un processus qui peut prendre un certain temps. Pour plus d’informations sur les événements de notification UIA, consultez Can your desktop app leverage the new UI Notification event?.

L’exemple suivant déclenche l’événement de 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%." });
}

Info-bulles pour l’accès par clavier

Dans les applications qui ciblent .NET Framework 4.7.2 et versions antérieures, pour déclencher une info-bulle de contrôle en vue de son affichage, vous devez déplacer le pointeur de la souris dans le contrôle. À partir de .NET Framework 4.8, un utilisateur du clavier peut déclencher l’info-bulle d’un contrôle en apportant le focus sur le contrôle à l’aide de la touche Tab ou des touches de direction, avec ou sans touches de modification. Cette amélioration de l’accessibilité nécessite un autre commutateur 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 figure suivante montre l’info-bulle lorsque l’utilisateur a sélectionné un bouton à l’aide du clavier.

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

Windows Presentation Foundation (WPF)

Dans .NET Framework 4.8, WPF comprend plusieurs améliorations d’accessibilité.

Les narrateurs d’écran n’annoncent plus les éléments réduits ou masqués

Les éléments réduits ou masqués (Collapsed ou Hidden) ne sont plus annoncés par le lecteur d’écran. Les interfaces utilisateur qui contiennent des éléments avec une visibilité Visibility.Collapsed ou Visibility.Hidden peuvent être mal représentées par les lecteurs d’écran si ces éléments sont annoncés à l’utilisateur. Dans .NET Framework 4.8, WPF n’inclut plus les éléments réduits ou masqués dans l’affichage de contrôle de l’arborescence UIAutomation. Les lecteurs d’écran ne peuvent donc plus annoncer ces éléments.

Propriété SelectionTextBrush à utiliser avec une sélection de texte sans ornement

Dans .NET Framework 4.7.2, WPF permet désormais de dessiner une sélection de texte TextBox et PasswordBox sans utiliser la couche d’ornement. Dans ce scénario, la couleur de premier plan du texte sélectionné a été dictée par SystemColors.HighlightTextBrush.

.NET Framework 4.8 comprend une nouvelle propriété (SelectionTextBrush) qui permet aux développeurs de sélectionner le pinceau du texte sélectionné lors de l’utilisation d’une sélection de texte sans ornement. Cette propriété fonctionne uniquement avec les contrôles dérivés de TextBoxBase et avec le contrôle PasswordBoxdes applications WPF où la sélection de texte sans ornement est activée. Elle ne fonctionne pas avec le contrôle RichTextBox. Si la sélection de texte sans ornement n’est pas activée, cette propriété est ignorée.

Pour utiliser cette propriété, il suffit de l’ajouter à votre code XAML et d’utiliser le pinceau ou la liaison appropriés. La sélection de texte qui en résulte ressemble à ceci :

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

Vous pouvez combiner l’utilisation des propriétés SelectionBrush et SelectionTextBrush pour générer la combinaison de couleurs de premier plan et d’arrière-plan qui vous convient.

Prise en charge de la propriété ControllerFor UIAutomation

La propriété ControllerFor d’UIAutomation retourne un tableau d’éléments d’automation manipulés par l’élément d’automation qui prend en charge cette propriété. Cette propriété est couramment utilisée pour la suggestion automatique. ControllerFor est utilisé lorsqu’un élément automation affecte un ou plusieurs segments de l’interface utilisateur de l’application ou du bureau. Sinon, il est difficile d’associer l’impact de l’opération de contrôle aux éléments de l’interface utilisateur. Cette fonctionnalité permet aux contrôles de fournir une valeur pour la propriété ControllerFor.

.NET Framework 4.8 comprend une nouvelle méthode virtuelle : GetControlledPeersCore(). Si vous souhaitez fournir une valeur pour la propriété ControllerFor, substituez cette méthode et retournez un List<AutomationPeer> pour les contrôles actuellement manipulés par ce 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;
   }
}

Info-bulles pour l’accès par clavier

Dans .NET Framework 4.7.2 et versions antérieures, les info-bulles s’affichent uniquement lorsque l’utilisateur pointe la souris sur un contrôle. Dans .NET Framework 4.8, les info-bulles s’affichent également dans le focus clavier et via un raccourci clavier.

Pour activer cette fonctionnalité, l’application doit cibler .NET Framework 4.8 ou adhérer à l’aide des commutateurs AppContextSwitch.UseLegacyAccessibilityFeatures.3 et Switch.UseLegacyToolTipDisplay. Voici un exemple de fichier de configuration d’application :

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

Une fois activée, tous les contrôles qui contiennent une info-bulle l’affichent dès que le contrôle reçoit le focus clavier. L’info-bulle peut être ignorée au bout d’un certain temps ou lorsque le focus clavier est modifié. Les utilisateurs peuvent également ignorer l’info-bulle manuellement à l’aide d’un nouveau raccourci clavier : Ctrl+Maj+F10. Une fois que l’info-bulle a été ignorée, celle-ci peut être affichée à nouveau à l’aide du même raccourci clavier.

Notes

Les info-bulles de ruban des contrôles Ribbon ne s’affichent pas dans le focus clavier. Elles s’affichent uniquement via le raccourci clavier.

Prise en charge pour des propriétés SizeOfSet et PositionInSet UIAutomation

Windows 10 comprend deux nouvelles propriétés UIAutomation (SizeOfSet et PositionInSet) qui sont utilisées par les applications pour indiquer le nombre d’éléments que contient un ensemble. Les applications clientes UIAutomation telles que les lecteurs d’écran peuvent ensuite interroger une application concernant ces propriétés, et annoncer une représentation exacte de l’interface utilisateur de l’application.

À partir de .NET Framework 4.8, WPF expose ces deux propriétés à UIAutomation dans les applications WPF. Cette opération peut se faire de deux façons :

  • En utilisant des propriétés de dépendance.

    WPF comprend deux nouvelles propriétés de dépendance : AutomationProperties.SizeOfSet et AutomationProperties.PositionInSet. Un développeur peut utiliser du code XAML pour définir les valeurs :

    <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>
    
  • En substituant les méthodes virtuelles AutomationPeer.

    Les méthodes virtuelles GetSizeOfSetCore() et GetPositionInSetCore() ont été ajoutées à la classe AutomationPeer. Un développeur peut fournir des valeurs pour SizeOfSet et PositionInSet en remplaçant ces méthodes, comme dans l’exemple suivant :

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

En outre, les éléments des instances ItemsControl fournissent automatiquement une valeur pour ces propriétés, sans autre action nécessaire de la part du développeur. Si un ItemsControl est regroupé, la collection de groupes est représentée comme un ensemble, et chaque groupe est comptabilisé comme un ensemble distinct. Chaque élément du groupe fournit sa position à l’intérieur de celui-ci, ainsi que la taille du groupe. Les valeurs automatiques ne sont pas affectées par la virtualisation. Même si un élément n’est pas réalisé, il est comptabilisé dans la taille totale de l’ensemble, et affecte la position de ses éléments frères dans l’ensemble.

Les valeurs automatiques sont fournies uniquement si l’application cible .NET Framework 4.8. Pour les applications qui ciblent une version antérieure de .NET Framework, vous pouvez définir le commutateur AppContextSwitch.UseLegacyAccessibilityFeatures.3, comme indiqué dans le fichier App.config suivant :

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

Concepteur de flux de travail Windows Workflow Foundation (WF)

Dans .NET Framework 4.8, les modifications suivantes ont été apportées au concepteur de flux de travail :

  • Les utilisateurs qui utilisent le narrateur constateront des améliorations au niveau des étiquettes case FlowSwitch.

  • Les utilisateurs qui utilisent le narrateur constateront des améliorations au niveau des descriptions des boutons.

  • Les utilisateurs qui choisissent des thèmes à contraste élevé verront des améliorations de la visibilité du Concepteur de flux de travail et de ses contrôles, notamment de meilleurs ratios de contraste entre les éléments et des zones de sélection plus visibles utilisées pour les éléments actifs.

Si votre application cible .NET Framework 4.7.2 ou une version antérieure, vous pouvez accepter ces modifications en définissant le commutateur AppContextSwitch.UseLegacyAccessibilityFeatures.3 sur false dans votre fichier de configuration d’application. Pour plus d’informations, consultez la section Activation des nouvelles fonctionnalités d’accessibilité de cet article.

Nouveautés concernant l’accessibilité dans .NET Framework 4.7.2

.NET Framework 4.7.2 apporte de nouvelles fonctionnalités d’accessibilité dans les domaines suivants :

Windows Forms

Couleurs définies par le système d’exploitation dans les thèmes à contraste élevé

À compter de .NET Framework 4.7.2, Windows Forms utilise les couleurs définies par le système d’exploitation dans les thèmes à contraste élevé. Cela concerne les contrôles suivants :

Améliorations du Narrateur

.NET Framework 4.7.2 et les versions ultérieures améliorent la prise en charge du narrateur de la façon suivante :

  • Le Narrateur annonce la valeur de la propriété ToolStripMenuItem.ShortcutKeys quand il annonce le texte d’un ToolStripMenuItem.

  • Il indique quand un ToolStripMenuItem a sa propriété Enabled définie sur false.

  • Il fournit des commentaires sur l’état d’une case à cocher quand la propriété ListView.CheckBoxes est définie sur true.

  • L’ordre de focus du mode balayage du Narrateur est cohérent avec l’ordre d’affichage des contrôles dans la fenêtre de la boîte de dialogue de téléchargement ClickOnce.

Améliorations du contrôle DataGridView

À compter de .NET Framework 4.7.2, le contrôle DataGridView présente les améliorations d’accessibilité suivantes :

Amélioration des signaux visuels

  • Les contrôles RadioButton et CheckBox dont la propriété Text est vide affichent un indicateur de focus lorsqu’ils deviennent actifs.

Amélioration de la prise en charge de la grille de propriétés

  • Les éléments enfants du contrôle PropertyGrid renvoient désormais un true pour la propriété IsReadOnlyProperty uniquement lorsqu’un élément PropertyGrid est activé.

  • Les éléments enfants du contrôle PropertyGrid retournent un false pour la propriété IsEnabledProperty uniquement quand un élément PropertyGrid peut être changé par l’utilisateur.

Navigation au clavier améliorée

Windows Presentation Foundation (WPF)

Changements apportés aux contrôles CheckBox et RadioButton

Dans .NET Framework 4.7.1 et les versions antérieures, les contrôles WPF System.Windows.Controls.CheckBox et System.Windows.Controls.RadioButton ont des visuels de focus incohérents et, dans les thèmes standard et à contraste élevé, des visuels de focus inappropriés. Ces problèmes se produisent dans les cas où les contrôles n’ont pas de contenu défini. Cela peut rendre la transition entre les thèmes confuse et le visuel de focus difficile à voir.

Dans .NET Framework 4.7.2, ces visuels sont désormais plus cohérents entre les thèmes et plus facilement visibles dans les thèmes de type classique et à contraste élevé.

Contrôles WinForms hébergés dans une application WPF

Dans .NET Framework 4.7.1 et les versions antérieures, les contrôles WinForms hébergés dans une application WPF ne permettaient pas aux utilisateurs de sortir de la couche WinForms à l’aide de la touche de tabulation quand le contrôle WPF ElementHost était le premier ou le dernier contrôle de cette couche. Dans .NET Framework 4.7.2, les utilisateurs peuvent désormais sortir de la couche WinForms à l’aide de la touche de tabulation.

Toutefois, les applications automatisées qui s’attendent à ce que le focus ne quitte jamais la couche WinForms risquent de ne plus fonctionner comme prévu.

Nouveautés concernant l’accessibilité dans .NET Framework 4.7.1

.NET Framework 4.7.1 apporte de nouvelles fonctionnalités d’accessibilité dans les domaines suivants :

Windows Presentation Foundation (WPF)

Améliorations du lecteur d’écran

Si les améliorations apportées à l’accessibilité sont activées, .NET Framework 4.7.1 inclut les améliorations suivantes qui affectent les lecteurs d’écran :

  • Dans .NET Framework 4.7 et versions antérieures, les contrôles Expander étaient annoncés par des lecteurs d’écran sous forme de boutons. À compter de .NET Framework 4.7.1, ils sont correctement annoncés en tant que groupes extensibles/réductibles.

  • Dans .NET Framework 4.7 et versions antérieures, les contrôles DataGridCell étaient annoncés par des lecteurs d’écran comme étant « personnalisés ». À compter de .NET Framework 4.7.1, ils sont correctement annoncés en tant que cellule de grille de données (localisée).

  • À compter de .NET Framework 4.7.1, les lecteurs d’écran annoncent le nom d’un élément ComboBox modifiable.

  • Dans .NET Framework 4.7 et versions antérieures, les contrôles PasswordBox entraînaient l’annonce « Aucun élément dans la vue » ou avaient un comportement incorrect. Ce problème est résolu depuis .NET Framework 4.7.1.

Prise en charge de zones dynamiques UIAutomation

Les lecteurs d’écran tels que le Narrateur aident les personnes à lire le contenu de l’interface utilisateur d’une application, généralement par une sortie conversion de texte par synthèse vocale du contenu de l’interface utilisateur actif. Toutefois, si un élément d’interface utilisateur change et n’est pas actif, l’utilisateur peut ne pas en être informé et manquer des informations importantes. Les zones dynamiques visent à résoudre ce problème. Un développeur peut les utiliser pour informer le lecteur d’écran ou tout autre client UIAutomation qu’une modification importante a été apportée à un élément d’interface utilisateur. Le lecteur d’écran peut ensuite décider comment et quand informer l’utilisateur de cette modification.

Pour prendre en charge les zones dynamiques, les API suivantes ont été ajoutées à WPF :

Vous pouvez créer une zone dynamique en définissant la propriété AutomationProperties.LiveSetting sur l’élément qui vous intéresse, comme indiqué dans l’exemple suivant :

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

Quand les données de la zone dynamique sont modifiées et que vous devez informer un lecteur d’écran, vous déclenchez explicitement un événement, comme indiqué dans l’exemple suivant.

var peer = FrameworkElementAutomationPeer.FromElement(myTextBlock);

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

Contraste élevé

À compter de .NET Framework 4.7.1, des améliorations ont été apportées au niveau du contraste élevé pour différents contrôles WPF. Elles sont désormais visibles quand le thème HighContrast est défini. Il s’agit notamment des paramètres suivants :

  • Contrôle Expander

    L’élément visuel de focus du contrôle Expander est désormais visible. Les éléments visuels de clavier pour les contrôles ComboBox, ListBox et RadioButton sont également visibles. Par exemple :

    Avant :

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

    Après :

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

  • Contrôles CheckBox et RadioButton

    Le texte dans les contrôles CheckBox et RadioButton est désormais plus facile à voir quand il est sélectionné dans les thèmes à contraste élevé. Par exemple :

    Avant :

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

    Après :

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

  • Contrôle ComboBox

    À compter de .NET Framework 4.7.1, la bordure d’un contrôle ComboBox désactivé est de la même couleur que le texte désactivé. Par exemple :

    Avant :

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

    Après :

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

    En outre, les boutons désactivés et actifs utilisent la couleur de thème correcte.

    Avant :

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

    Après :

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

    Enfin, dans .NET Framework 4.7 et versions antérieures, la définition du style d’un contrôle ComboBox sur Toolbar.ComboBoxStyleKey rendait la flèche déroulante invisible. Ce problème est résolu depuis .NET Framework 4.7.1. Par exemple :

    Avant :

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

    Après :

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

  • Contrôle DataGrid

    À compter de .NET Framework 4.7.1, la flèche d’indicateur de tri dans les contrôles DataGrid utilise maintenant les couleurs de thème correctes. Par exemple :

    Avant :

    Screenshot of sort indicator arrow before improvements.

    Après :

    Screenshot of sort indicator arrow after improvements.

    En outre, dans .NET Framework 4.7 et versions antérieures, le style de lien par défaut prenait une couleur incorrecte lorsque l’utilisateur pointait avec la souris dans des modes de contraste élevé. Ce problème est résolu depuis .NET Framework 4.7.1. De même, à partir de .NET Framework 4.7.1, les colonnes de cases à cocher DataGrid utilisent les couleurs attendues pour les commentaires de focus clavier.

    Avant :

    Screenshot of a link saying Click Me! in red.

    Après :

    Screenshot of a link saying Click Me! in yellow.

Pour plus d’informations sur les améliorations apportées à l’accessibilité WPF dans .NET Framework 4.7.1, consultez Améliorations apportées à l’accessibilité dans WPF.

Améliorations apportées à l’accessibilité dans les Windows Forms

Dans .NET Framework 4.7.1, WinForms (Windows Forms) présente des modifications de l’accessibilité dans les domaines suivants.

Affichage amélioré en mode de contraste élevé

À compter de .NET Framework 4.7.1, différents contrôles WinForms offrent un meilleur rendu dans les modes de contraste élevé disponibles dans le système d’exploitation. Windows 10 a modifié les valeurs de certaines couleurs système à contraste élevé et Windows Forms repose sur le framework Windows 10 Win32. Pour une expérience optimale, utilisez la dernière version de Windows et acceptez les derniers changements du système d’exploitation en ajoutant un fichier app.manifest dans une application de test et en supprimant les marques de commentaire de la ligne de système d’exploitation Windows 10 pour qu’elle ressemble à ce qui suit :

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

Voici quelques exemples de modifications du contraste élevé :

  • Les coches dans les éléments MenuStrip sont plus faciles à afficher.

  • Quand ils sont sélectionnés, les éléments MenuStrip désactivés sont plus faciles à afficher.

  • Le texte dans un contrôle Button sélectionné contraste avec la couleur de sélection.

  • Le texte désactivé est plus facile à lire. Par exemple :

    Avant :

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

    Après :

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

  • Améliorations du contraste élevé dans la boîte de dialogue Thread Exception (Exception de thread).

Amélioration de la prise en charge du Narrateur

Dans .NET Framework 4.7.1, Windows Forms inclut les améliorations suivantes au niveau de l’accessibilité du narrateur :

  • Le contrôle MonthCalendar est accessible par le Narrateur, ainsi que par d’autres outils UI Automation.

  • Le contrôle CheckedListBox avertit le Narrateur quand l’état de case à cocher d’un élément a changé pour que l’utilisateur sache que la valeur d’un élément de liste est modifiée.

  • Le contrôle DataGridViewCell signale l’état Lecture seule correct au Narrateur.

  • Le Narrateur peut désormais lire le texte ToolStripMenuItem désactivé, alors qu’il ignorait précédemment les éléments de menu désactivés.

Prise en charge améliorée des modèles d’accessibilité UIAutomation

À compter de .NET Framework 4.7.1, les développeurs d’outils technologiques d’accessibilité peuvent tirer parti des modèles d’accessibilité d’API courants et des propriétés de plusieurs contrôles WinForms. Ces améliorations en matière d’accessibilité sont notamment :

Expérience améliorée avec l’Explorateur de propriétés

À compter de .NET Framework 4.7.1, Windows Forms propose :

  • Une meilleure navigation au clavier via les différentes fenêtres de sélection de liste déroulante.
  • Une réduction des taquets de tabulation inutiles.
  • Des rapports plus élaborés sur les types de contrôles.
  • Un comportement amélioré du Narrateur.

Contrôles web ASP.NET

À partir de .NET Framework 4.7.1 et de Visual Studio 2017 version 15.3, ASP.NET améliore le fonctionnement des contrôles web ASP.NET avec la technologie d’accessibilité de Visual Studio. Les changements apportés sont les suivants :

  • Changements visant à implémenter les modèles d’accessibilité de l’interface utilisateur manquants dans les contrôles, comme la boîte de dialogue Ajouter un champ de l’Assistant Vue Détails ou la boîte de dialogue Configurer ListView de l’Assistant ListView.

  • Changements visant à améliorer l’affichage en mode de contraste élevé, comme l’éditeur de champs du pagineur de données.

  • Changements visant à améliorer les expériences de navigation au clavier pour les contrôles, comme la boîte de dialogue Champs de l’Assistant Modifier les champs du pagineur du contrôle DataPager, la boîte de dialogue Configurer ObjectContext ou la boîte de dialogue Configurer la sélection de données de l’Assistant Configurer la source de données.

Outils du kit SDK . NET

Divers problèmes d’accessibilité ont été corrigés dans l’outil Éditeur de Configuration (SvcConfigEditor.exe) et l’outil Service Trace Viewer (SvcTraceViewer.exe). La plupart étaient des problèmes sans gravité, par exemple, un nom non défini ou certains modèles d’automatisation de l’interface utilisateur non implémentés correctement. La majorité des utilisateurs ne remarqueront même pas ces problèmes, mais les clients qui utilisent des technologies d’assistance comme les lecteurs d’écran trouveront les outils de ce kit SDK plus accessibles.

Ces améliorations changent certains comportements précédents, comme l’ordre de focus du clavier.

Concepteur de flux de travail Windows Workflow Foundation (WF)

Les changements apportés pour améliorer l’accessibilité dans le Concepteur de flux de travail sont les suivants :

  • L’ordre de tabulation est maintenant de gauche à droite et de haut en bas dans certains contrôles :

  • D’autres fonctions sont disponibles par le biais du clavier :

    • Quand vous modifiez les propriétés d’une activité, les groupes de propriétés peuvent être réduits à l’aide du clavier la première fois qu’ils ont le focus.

    • Les icônes d’avertissement sont accessibles à l’aide du clavier.

    • Le bouton Plus de propriétés de la fenêtre Propriétés est accessible à l’aide du clavier.

    • Les utilisateurs du clavier peuvent accéder aux éléments d’en-tête dans les volets Arguments et Variables du Concepteur de flux de travail.

  • Une meilleure visibilité des éléments ayant le focus, par exemple dans les cas suivants :

    • Ajout de lignes dans des grilles de données utilisées par le Concepteur de flux de travail et les concepteurs d’activités.

    • Déplacement par tabulation dans les champs des activités ReceiveReply et SendReply.

    • Définition de valeurs par défaut pour les variables ou les arguments

  • Les lecteurs d’écran peuvent désormais reconnaître correctement :

    • Les points d’arrêt définis dans le Concepteur de flux de travail.

    • Les activités FlowSwitch<T>, FlowDecision et CorrelationScope.

    • Le contenu de l’activité Receive.

    • Le type cible pour l’activité InvokeMethod.

    • Le contrôle zone de liste déroulante Exception et la section Finally de l’activité TryCatch.

    • Le contrôle zone de liste déroulante Type de message, le séparateur dans la fenêtre Ajouter des initialiseurs de corrélation, la fenêtre de définition du contenu et la fenêtre Définition de CorrelatesOn dans les activités de messagerie (Receive, Send, SendReply et ReceiveReply).

    • Transitions d’ordinateur d’état et destination des transitions.

    • Annotations et connecteurs sur les activités FlowDecision.

    • Les menus contextuels (accessibles en cliquant avec le bouton droit) pour les activités.

    • Les éditeurs de valeurs de propriété, le bouton Effacer la recherche, les boutons a catégorie par et boutons de tri Par catégorie et Ordre alphabétique et la boîte de dialogue Éditeur d’expressions dans la grille des propriétés.

    • Le pourcentage de zoom dans le Concepteur de flux de travail.

    • Le séparateur dans les activités Parallel et Pick.

    • L’activité InvokeDelegate.

    • La fenêtre Sélectionner les types pour les activités de dictionnaire (Microsoft.Activities.AddToDictionary<TKey,TValue>, Microsoft.Activities.RemoveFromDictionary<TKey,TValue>, etc.).

    • La fenêtre Rechercher et sélectionner un type .NET.

    • Les barres de navigation dans le Concepteur de flux de travail.

  • Les utilisateurs qui choisissent des thèmes à contraste élevé verront de nombreuses améliorations de la visibilité du Concepteur de flux de travail et de ses contrôles, notamment de meilleurs ratios de contraste entre les éléments et des zones de sélection plus visibles utilisées pour les éléments actifs.

Voir aussi