Novità nell'accessibilità in .NET Framework

.NET Framework mira a rendere le applicazioni più accessibili per gli utenti. Le funzionalità di accessibilità consentono a un'applicazione di offrire un'esperienza appropriata per gli utenti di assistive technology. A partire da .NET Framework 4.7.1, .NET Framework include numerosi miglioramenti per l'accessibilità che consentono agli sviluppatori di creare applicazioni accessibili.

Opzioni di accessibilità

È possibile configurare l'app per acconsentire esplicitamente alle funzionalità di accessibilità se l'app è destinata a .NET Framework 4.7 o a una versione precedente, ma viene eseguita in .NET Framework 4.7.1 o versione successiva. È anche possibile configurare l'app per usare le funzionalità legacy (e rinunciare alle funzionalità di accessibilità) se l'app è destinata a .NET Framework 4.7.1 o versioni successive. Ogni versione di .NET Framework che include funzionalità di accessibilità ha un'opzione di accessibilità specifica per la versione, che è possibile aggiungere all'elemento <AppContextSwitchOverrides> nella sezione <runtime> del file di configurazione dell'applicazione. Le opzioni supportate sono le seguenti:

Versione Switch
.NET Framework 4.7.1 "Switch.UseLegacyAccessibilityFeatures"
.NET Framework 4.7.2 "Switch.UseLegacyAccessibilityFeatures.2"
.NET Framework 4.8 "Switch.UseLegacyAccessibilityFeatures.3"
11 agosto 2020-KB4569746 aggiornamento cumulativo per .NET Framework 4.8 "Switch.UseLegacyAccessibilityFeatures.4"
.NET Framework 4.8.1 "Switch.UseLegacyAccessibilityFeatures.5"

Sfruttare i vantaggi dei miglioramenti all'accessibilità

Le nuove funzionalità di accessibilità sono abilitate per impostazione predefinita per le applicazioni destinate a .NET Framework 4.7.1 o versioni successive. Inoltre, le applicazioni destinate a una versione precedente di .NET Framework ma eseguite in .NET Framework 4.7.1 o versioni successive possono rifiutare esplicitamente comportamenti di accessibilità legacy (potendo così sfruttare i miglioramenti dell'accessibilità) aggiungendo opzioni all'elemento <AppContextSwitchOverrides> nella sezione <runtime> del file di configurazione dell'applicazione e impostandone il valore su false. Il frammento di codice seguente illustra come acconsentire esplicitamente ai miglioramenti dell'accessibilità introdotti in .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 si sceglie di acconsentire esplicitamente alle funzionalità di accessibilità in una versione successiva di .NET Framework, è necessario anche acconsentire esplicitamente alle funzionalità delle versioni precedenti. La configurazione dell'app per sfruttare i miglioramenti all'accessibilità in .NET Framework 4.7.1 e 4.7.2 richiede di aggiungere l'elemento <AppContextSwitchOverrides> seguente:

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

Per configurare l'app per sfruttare i miglioramenti dell'accessibilità in .NET Framework 4.7.1, 4.7.2, 4.8 e dell'aggiornamento cumulativo di agosto 2020 per .NET Framework 4.8, aggiungere l'elemento <AppContextSwitchOverrides> seguente:

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

Ripristino del comportamento legacy

Le applicazioni destinate alle versioni di .NET Framework a partire dalla 4.7.1 possono disabilitare le funzionalità di accessibilità aggiungendo opzioni all'elemento <AppContextSwitchOverrides> nella sezione <runtime> del file di configurazione dell'applicazione e impostandone il valore su true. Ad esempio, la configurazione seguente rifiuta esplicitamente le funzionalità di accessibilità introdotte in .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>

Nuove funzionalità di accessibilità in .NET Framework 4.8.1

.NET Framework 4.8.1 include nuove funzionalità di accessibilità nelle aree seguenti:

WinForms

Aggiunta e miglioramento delle rappresentazioni dell'Automazione interfaccia utente

Prima di .NET Framework 4.8.1, in Windows Form mancava il supporto per una serie di modelli di Automazione interfaccia utente per supportare l'assistive technology nell'interazione con le applicazioni. Questa carenza può portare l'Assistente vocale o altre utilità per la lettura dello schermo a segnalare informazioni incomplete o errate. Può anche influire su funzionalità importanti, ad esempio lo spostamento di un cursore nel testo in un controllo TextBox. Con .NET Framework 4.8.1 sono stati implementati tutti i modelli necessari per i controlli comuni. Questa nuova funzionalità offre agli utenti di assistive technology un'esperienza di interazione con le applicazioni molto più ricca.

  • Aggiunta del supporto per il modello di espansione/compressione di Automazione interfaccia utente al controllo DateTimePicker.
  • Aggiunta del supporto di Automazione interfaccia utente al controllo MonthCalendar. Ora gli strumenti di assistive technology, ad esempio l'Assistente vocale, possono spostarsi tra le singole date nel controllo.
  • È stato implementato il supporto del pattern di testo per tutti i controlli basati su testo, inclusi i controlli TextBox, MaskedTextBox, controllo di modifica PropertyGrid, DataGridViewTextBoxCell, ToolStripTextBox e DomainUpDown.
  • ToolTip ora segue le linee guida WCAG2.1 per essere persistente eliminabile e sensibile al passaggio del mouse in Windows 11. Le modifiche apportate al comportamento della descrizione comando sono limitate ai sistemi Windows 11 in cui è installato .NET Framework 4.8.1 e si applicano solo alle applicazioni in cui non è stato impostato un timeout per la descrizione comando. Le descrizioni comando persistenti possono essere ignorate con il tasto ESC o il tasto CTRL oppure passando a un controllo con un altro set di descrizioni comando.

Varie correzioni di bug per le funzionalità di accessibilità esistenti

  • L'Assistente vocale può ora concentrarsi su un controllo DataGridView vuoto.
  • È stato risolto un problema che portava le utilità per la lettura dello schermo a contare le colonne nascoste durante l'annuncio del numero di colonne in un controllo DataGridView.
  • È stato risolto un problema che portava DataGridView a ignorare le impostazioni del tipo di carattere impostate in DataGridviewCellStyle se il modulo sottostante aveva una proprietà Font diversa da DefaultFont.
  • Aggiornamento della proprietà AccessibleName delle barre di scorrimento interne del controllo DataGridView per rimuovere il testo "ScrollBar".
  • Correzione del colore di DataGridViewLinkCell quando la cella è selezionata.
  • È stato risolto un problema relativo ai controlli DataGridView personalizzati in cui non era disponibile alcun ControlType o LocalizedControlType per gli elementi personalizzati DataGridViewCell.
  • Aggiornamento del rapporto di luminosità a 3,5:1 per i controlli ToolStripButton impostati su System da ToolStripRenderMode.
  • Miglioramento della navigazione tramite tastiera in ToolStrip quando l'elemento è un tipo ToolStripComboBox.
  • Aggiornamento del colore di sfondo di ToolStripButton in modalità a contrasto elevato.
  • È stata verificata la presenza di un rettangolo di delimitazione segnalato all'assistive technology per ToolStripSeparator.
  • È stato risolto un problema che poteva causare l'arresto anomalo dell'utilità per la lettura dello schermo JAWS durante la lettura del controllo PropertyGrid.
  • È stato verificato che l'albero della gerarchia di Automazione interfaccia utente per un controllo PropertyGrid viene aggiornato quando viene espansa una voce complessa come Font. È stato verificato anche che l'albero viene aggiornato correttamente quando la voce viene compressa e non più visibile.
  • Le categorie PropertyGrid hanno ora un tipo di controllo localizzato di PropertyGrid category.
  • È stato risolto un problema con ComboBox che poteva causare l'arresto anomalo dell'app in Accessibility Insights per Windows.
  • È stato aggiornato il colore del bordo affinché Button abbia un maggiore contrasto nei colori predefiniti.
  • Strumenti di assistive technology abilitati per accedere ai pulsanti ControlBox di un modulo figlio MDI ingrandito.
  • La proprietà AccessibleName di un controllo DomainUpDown ha un nuovo valore predefinito di una stringa vuota. La stringa vuota incoraggia gli sviluppatori a creare un nome significativo anziché accettare il valore predefinito non vuoto precedente.
  • Aggiornamento della proprietà AccessibleName del pulsante Stampa in PrintPreviewDialog da "Pulsante Stampa" a "Stampa" per evitare ridondanza quando le utilità per la lettura dello schermo annunciano il controllo e il relativo tipo.
  • Aggiornamento dell'elenco di Automazione interfaccia utente per rimuovere un elemento dell'elenco vuoto quando una cella PropertyGrid di tipo ComboBox viene chiusa e non più visibile.

Windows Presentation Foundation (WPF)

Miglioramenti nella gestione delle descrizioni comando accessibili

In questa versione WPF ha migliorato l'esperienza assicurando che una descrizione comando nella finestra corrente possa essere facilmente ignorata usando il tasto ESC, il tasto CTRL (da solo) o tramite la combinazione CTRL+MAIUSC+F10. L'ambito della chiave ESC è stato ridotto in questa versione per essere applicato solo alla finestra corrente, mentre in precedenza sarebbe stato applicato a qualsiasi descrizione comando aperta nell'applicazione. Per impostazione predefinita, le descrizioni comando WPF seguiranno le linee guida WCAG2.1 per essere persistenti, ignorabili e sensibili al passaggio del mouse.

Novità dell'accessibilità nell'aggiornamento cumulativo dell'11 agosto 2020 per .NET Framework 4.8

L'aggiornamento cumulativo dell'11 agosto 2020-KB4569746 per .NET Framework 4.8 include nuove funzionalità di accessibilità in Windows Form:

  • Risolve un problema relativo all'annuncio degli elementi di controllo PropertyGrid e dello stato espanso/compresso di una categoria da parte delle utilità per la lettura dello schermo.

  • Aggiornamenti dei modelli accessibili del controllo PropertyGrid e dei relativi elementi interni.

  • Aggiornamenti dei nomi accessibili degli elementi interni del controllo PropertyGrid in modo che vengano annunciati correttamente dalle utilità per la lettura dello schermo.

  • Indirizza le proprietà accessibili del rettangolo di delimitazione per i controlli PropertyGridView.

  • Consente alle utilità per la lettura dello schermo di annunciare correttamente lo stato espanso/compresso delle celle della casella combinata DataGridView.

Nuove funzionalità di accessibilità in .NET Framework 4.8

.NET Framework 4.8 include nuove funzionalità di accessibilità nelle aree seguenti:

WinForms

In .NET Framework 4.8 Windows Forms aggiunge il supporto per le aree dinamiche e gli eventi di notifica a numerosi controlli usati di frequente. Aggiunge anche il supporto per le descrizioni comando quando l'utente passa a un controllo usando la tastiera.

Supporto delle aree dinamiche di automazione interfaccia utente nelle etichette e nelle barre di stato

Le aree dinamiche di automazione interfaccia utente consentono agli sviluppatori di applicazioni di notificare alle utilità per la lettura dello schermo una modifica del testo in un controllo che si trova in un'altra posizione rispetto alla posizione attuale dell'utente. Questa funzionalità è utile ad esempio per i controlli StatusStrip che visualizzano lo stato di una connessione. Se la connessione viene interrotta e lo stato viene modificato, è possibile che lo sviluppatore voglia inviare una notifica all'utilità per la lettura dello schermo.

A partire da .NET Framework 4.8, Windows Forms implementa le aree dinamiche di automazione interfaccia utente per entrambi i controlli Label e StatusStrip. Ad esempio, il codice seguente usa l'area dinamica in un controllo Label denominato label1:

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

…
Label1.Text = "Ready!";

L'Assistente vocale annuncia "Pronto" indipendentemente dalla posizione in cui l'utente interagisce con l'applicazione.

È anche possibile implementare UserControl come area dinamica:

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

Eventi di notifica di automazione interfaccia utente

L'evento di notifica di automazione interfaccia utente, introdotto in Windows 10 Fall Creators Update, consente all'app di generare un evento di automazione interfaccia utente in modo che l'Assistente vocale emetta un annuncio in base al testo immesso con l'evento anche senza un controllo corrispondente nell'interfaccia utente. In alcuni scenari questo è un modo semplice per migliorare notevolmente l'accessibilità dell'app. Può essere utile anche notificare lo stato di avanzamento di un processo che potrebbe richiedere molto tempo. Per altre informazioni sugli eventi di notifica di automazione interfaccia utente, vedere Can your desktop app leverage the new UI Notification event? (L'app desktop può usare il nuovo evento di notifica dell'interfaccia utente?).

L'esempio seguente genera l'evento di notifica:

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

Descrizioni comando nell'accesso da tastiera

Nelle applicazioni destinate a .NET Framework 4.7.2 e versioni precedenti un controllo descrizione comando può essere attivato e visualizzato spostando il puntatore del mouse sul controllo. A partire da .NET Framework 4.8 un utente della tastiera può attivare la descrizione comando del controllo evidenziando il controllo tramite il tasto TAB o i tasti di direzione con o senza tasti di modifica. Questo specifico miglioramento dell'accessibilità richiede un'opzione AppContext aggiuntiva:

<?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 figura seguente mostra la descrizione comando visualizzata quando l'utente seleziona un pulsante con la tastiera.

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

Windows Presentation Foundation (WPF)

A partire da .NET Framework 4.8, WPF include una serie di miglioramenti dell'accessibilità.

Gli assistenti vocali dello schermo non annunciano più gli elementi con visibilità Compresso o Nascosto

Gli elementi con visibilità Compresso o Nascosto non sono più annunciati dalle utilità per la lettura dello schermo. Le interfacce utente che contengono elementi con visibilità Visibility.Collapsed o Visibility.Hidden possono essere interpretate erroneamente dalle utilità per la lettura dello schermo se vengono annunciate all'utente. A partire da .NET Framework 4.8, poiché WPF non include più gli elementi compressi o nascosti nella visualizzazione dei controlli dell'albero di automazione interfaccia utente, le utilità per la lettura dello schermo non possono più annunciare questi elementi.

Proprietà SelectionTextBrush da usare con una selezione testo non basata su Adorner

In .NET Framework 4.7.2, WPF ha aggiunto la possibilità di disegnare una selezione testo TextBox e PasswordBox senza usare il livello Adorner. Il colore primo piano del testo selezionato in questo scenario è determinato da SystemColors.HighlightTextBrush.

.NET Framework 4.8 aggiunge una nuova proprietà, SelectionTextBrush, che consente agli sviluppatori di selezionare il pennello specifico per il testo selezionato durante l'uso di una selezione testo non basata su Adorner. Questa proprietà funziona solo nei controlli derivati da TextBoxBase e nel controllo PasswordBox nelle applicazioni in WPF con una selezione testo non basata su Adorner abilitata. Non funziona nel controllo RichTextBox. Se non è abilitata una selezione testo non basata su Adorner, questa proprietà viene ignorata.

Per usare questa proprietà, è sufficiente aggiungerla al codice XAML e usare il pennello o l'associazione appropriata. La selezione testo risultante è simile alla seguente:

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

È possibile usare insieme le proprietà SelectionBrush e SelectionTextBrush per generare qualsiasi combinazione di colore primo piano e colore di sfondo che si ritiene appropriata.

Supporto per la proprietà ControllerFor di automazione interfaccia utente

La proprietà ControllerFor di automazione interfaccia utente restituisce una matrice di elementi di automazione che vengono modificati dall'elemento di automazione che supporta la proprietà. Questa proprietà viene in genere usata per l'accessibilità dei suggerimenti automatici. La proprietà ControllerFor viene usata quando un elemento di automazione ha effetto su uno o più segmenti dell'interfaccia utente dell'applicazione e del desktop. In caso contrario, è difficile associare l'impatto del controllo sugli elementi dell'interfaccia utente. Questa funzionalità aggiunge ai controlli la capacità di specificare un valore per la proprietà ControllerFor.

.NET Framework 4.8 aggiunge il nuovo metodo virtuale GetControlledPeersCore(). Per specificare un valore per la proprietà ControllerFor, è sufficiente eseguire l'override del metodo e restituire List<AutomationPeer> per i controlli modificati da 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;
   }
}

Descrizioni comando nell'accesso da tastiera

In .NET Framework 4.7.2 e versioni precedenti le descrizioni comando vengono visualizzate solo quando l'utente posiziona il cursore del mouse su un controllo. In .NET Framework 4.8 le descrizioni comando vengono visualizzate anche con lo stato attivo della tastiera e tramite un tasto di scelta rapida.

Per abilitare questa funzionalità, è necessario che l'applicazione sia destinata a .NET Framework 4.8 o venga abilitata esplicitamente tramite le opzioni AppContextSwitch.UseLegacyAccessibilityFeatures.3 e Switch.UseLegacyToolTipDisplay. Di seguito è riportato un file di configurazione dell'applicazione di esempio:

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

Dopo l'abilitazione, tutti i controlli che contengono una descrizione comando visualizzano la descrizione quando il controllo ottiene lo stato attivo della tastiera. La descrizione comando può essere nascosta dopo un determinato periodo di tempo o quando viene modificato lo stato attivo della tastiera. Gli utenti possono anche ignorare la descrizione comando manualmente usando i nuovi tasti di scelta rapida CTRL+MAIUSC+F10. Dopo aver ignorato la descrizione comando è possibile visualizzarla nuovamente usando gli stessi tasti di scelta rapida.

Nota

Le descrizioni comando della barra multifunzione nei controlli Ribbon non verranno visualizzate nello stato attivo della tastiera, ma soltanto tramite i tasti di scelta rapida.

Aggiunta del supporto per le proprietà di automazione interfaccia utente SizeOfSet e PositionInSet

In Windows 10 sono state introdotte due nuove proprietà di automazione interfaccia utente, SizeOfSet e PositionInSet, che vengono usate dalle applicazioni per descrivere il conteggio degli elementi in un set. Le applicazioni client di automazione interfaccia utente, ad esempio le utilità per la lettura dello schermo, possono quindi ricercare queste proprietà in un'applicazione e annunciare una rappresentazione accurata dell'interfaccia utente dell'applicazione.

A partire da .NET Framework 4.8, WPF espone queste due proprietà per l'automazione interfaccia utente nelle applicazioni WPF. Questa operazione può essere eseguita in due modi:

  • Usando le proprietà di dipendenza.

    WPF aggiunge due nuove proprietà di dipendenza, AutomationProperties.SizeOfSet e AutomationProperties.PositionInSet. Gli sviluppatori possono impostarne i valori usando XAML:

    <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>
    
  • Eseguendo l'override di metodi virtuali di AutomationPeer.

    I metodi virtuali GetSizeOfSetCore() e GetPositionInSetCore() sono stati aggiunti alla classe AutomationPeer. Gli sviluppatori possono specificare i valori di SizeOfSet e PositionInSet eseguendo l'override di questi metodi, come illustrato nell'esempio seguente:

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

Inoltre, gli elementi nelle istanze ItemsControl specificano automaticamente un valore per queste proprietà senza ulteriori azioni da parte dello sviluppatore. Se ItemsControl è raggruppato, la raccolta di gruppi è rappresentata come set e ogni gruppo viene conteggiato come set separato in cui ogni elemento all'interno del gruppo specifica la propria posizione all'interno del gruppo e le dimensioni del gruppo. La virtualizzazione non ha effetto sui valori automatici. Anche se un elemento non è realizzato, viene comunque conteggiato nelle dimensioni totali del set e influisce sulla posizione dei relativi elementi di pari livello nel set.

I valori automatici vengono forniti solo se l'applicazione è destinata a .NET Framework 4.8. Per le applicazioni destinate a una versione precedente di .NET Framework, è possibile impostare l'opzione AppContextSwitch.UseLegacyAccessibilityFeatures.3, come illustrato nel file App.config seguente:

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

Progettazione dei flussi di lavoro di Windows Workflow Foundation (WF)

La finestra di progettazione dei flussi di lavoro include le modifiche seguenti in .NET Framework 4.8:

  • Gli utenti che usano l'Assistente vocale noteranno miglioramenti nelle etichette case FlowSwitch.

  • Gli utenti che usano l'Assistente vocale noteranno miglioramenti nelle descrizioni dei pulsanti.

  • Gli utenti che usano i temi a contrasto elevato noteranno miglioramenti nella visibilità di Progettazione flussi di lavoro e nei relativi controlli, ad esempio rapporti di contrasto più definiti tra gli elementi e caselle di selezione più evidenti per gli elementi con lo stato attivo.

Se l'applicazione è destinata a .NET Framework 4.7.2 o versione precedente, è possibile scegliere esplicitamente queste modifiche impostando l'opzione AppContextSwitch.UseLegacyAccessibilityFeatures.3 su false nel file di configurazione dell'applicazione. Per altre informazioni, vedere la sezione Sfruttare i vantaggi dei miglioramenti all'accessibilità in questo articolo.

Nuove funzionalità di accessibilità in .NET Framework 4.7.2

.NET Framework 4.7.2 include nuove funzionalità di accessibilità nelle aree seguenti:

WinForms

Colori definiti dal sistema operativo nei temi a contrasto elevato

A partire da .NET Framework 4.7.2, Windows Forms usa colori definiti dal sistema operativo dei temi di contrasto elevato. Ciò influisce sui controlli seguenti:

Miglioramenti di Assistente vocale

A partire da .NET Framework 4.7.2, il supporto dell'Assistente vocale è stato migliorato come segue:

  • Annuncia il valore della proprietà ToolStripMenuItem.ShortcutKeys mentre annuncia il testo di una classe ToolStripMenuItem.

  • Indica quando una classe ToolStripMenuItem ha la proprietà Enabled impostata su false.

  • Offre un feedback sullo stato di una casella di controllo quando la proprietà ListView.CheckBoxes è impostata su true.

  • L'ordine di attivazione nella modalità di analisi dell'Assistente vocale rispetta l'ordine degli oggetti visivi dei controlli nella finestra di dialogo di download ClickOnce.

Miglioramenti apportati a DataGridView

A partire da .NET Framework 4.7.2, il controllo DataGridView ha introdotto i miglioramenti di accessibilità seguenti:

Segnali visivi migliorati

  • I controlli RadioButton e CheckBox con proprietà Text vuota visualizzano un indicatore di stato attivo quando ricevono lo stato attivo.

Supporto migliorato per PropertyGrid

  • Gli elementi figlio del controllo PropertyGrid ora restituiscono true per la proprietà IsReadOnlyProperty solo quando è abilitato un elemento PropertyGrid.

  • Gli elementi figlio del controllo PropertyGrid restituiscono false per la proprietà IsEnabledProperty solo quando un elemento PropertyGrid può essere modificato dall'utente.

Navigazione tramite tastiera migliorata

Windows Presentation Foundation (WPF)

Modifiche ai controlli CheckBox e RadioButton

In .NET Framework 4.7.1 e versioni precedenti i controlli System.Windows.Controls.CheckBox e System.Windows.Controls.RadioButton di WPF contengono oggetti visivi dello stato attivo incoerenti e non corretti nei temi classico e a contrasto elevato. Questi problemi si verificano se i controlli non hanno impostato un contenuto. La transizione tra i temi può risultare quindi confusa e diventa difficile visualizzare l'oggetto visivo con stato attivo.

In .NET Framework 4.7.2 questi oggetti visivi sono più coerenti tra i temi e possono essere visualizzati più facilmente nei temi classico e a contrasto elevato.

Controlli WinForms ospitati in un'applicazione WPF

Nel caso di un controllo WinForms ospitato in un'applicazione WPF in .NET Framework 4.7.1 e versioni precedenti, gli utenti non potevano uscire dal livello WinForms se il primo o l'ultimo controllo nel livello era il controllo ElementHost di WPF. In .NET Framework 4.7.2 gli utenti possono uscire dal livello di WinForms.

Tuttavia, le applicazioni automatiche che si basano sullo stato attivo che non esce mai dal livello di WinForms potrebbero non funzionare più come previsto.

Nuove funzionalità di accessibilità in .NET Framework 4.7.1

.NET Framework 4.7.1 include nuove funzionalità di accessibilità nelle aree seguenti:

Windows Presentation Foundation (WPF)

Miglioramenti per le utilità per la lettura dello schermo

Se sono abilitati i miglioramenti per l'accessibilità, .NET Framework 4.7.1 include i miglioramenti seguenti che riguardano le utilità per la lettura dello schermo:

  • In .NET Framework 4.7 e versioni precedenti i controlli Expander vengono annunciati come pulsanti dalle utilità per la lettura dello schermo. A partire da .NET Framework 4.7.1, sono annunciati correttamente come gruppi espandibili/comprimibili.

  • In .NET Framework 4.7 e versioni precedenti i controlli DataGridCell vengono annunciati come "personalizzati" dalle utilità per la lettura dello schermo. A partire da .NET Framework 4.7.1, sono annunciati correttamente come cella di griglia dati (localizzati).

  • A partire da .NET Framework 4.7.1, le utilità per la lettura dello schermo annunciano il nome di un controllo ComboBox modificabile.

  • In .NET Framework 4.7 e versioni precedenti i controlli PasswordBox vengono annunciati come "Nessun elemento visualizzato" o il comportamento è in altro modo non corretto. Questo problema è stato risolto a partire da .NET Framework 4.7.1.

Supporto di aree dinamiche UIAutomation

Le utilità per la lettura dello schermo, come Assistente vocale, consentono di leggere il contenuto dell'interfaccia utente di un'applicazione, in genere annunciando tramite sintesi vocale il contenuto dell'interfaccia utente con lo stato attivo. Tuttavia, se un elemento dell'interfaccia utente viene modificato e non ha lo stato attivo, l'utente potrebbe non ricevere notifica e perdere informazioni importanti. Le aree dinamiche sono progettate per risolvere questo problema. Uno sviluppatore può usarle per informare l'utilità per la lettura dello schermo o qualsiasi altro client UIAutomation di un'importante modifica apportata a un elemento dell'interfaccia utente. L'utilità per la lettura dello schermo può quindi decidere come e quando informare l'utente di questa modifica.

Per supportare le aree dinamiche sono state aggiunte le API seguenti a WPF:

È possibile creare un'area dinamica impostando la proprietà AutomationProperties.LiveSetting sull'elemento di interesse, come illustrato nell'esempio seguente:

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

Quando vengono modificati i dati nell'area dinamica ed è necessario informarne un'utilità per la lettura dello schermo, deve essere generato un evento in modo esplicito, come illustrato nell'esempio seguente.

var peer = FrameworkElementAutomationPeer.FromElement(myTextBlock);

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

Contrasto elevato

A partire da .NET Framework 4.7.1, sono stati apportati miglioramenti relativi al contrasto elevato per vari controlli WPF, che sono ora visibili quando viene impostato il tema HighContrast. tra cui:

  • Controllo Expander

    L'oggetto visivo dello stato attivo per il controllo Expander è ora visibile. Anche gli oggetti visivi della tastiera per i controlli ComboBox, ListBox e RadioButton sono visibili. Ad esempio:

    Prima:

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

    Dopo:

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

  • Controlli CheckBox e RadioButton

    Il testo nei controlli CheckBox e RadioButton è ora più semplice da vedere quando viene selezionato nei temi a contrasto elevato. Ad esempio:

    Prima:

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

    Dopo:

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

  • Controllo ComboBox

    A partire da .NET Framework 4.7.1, il bordo di un controllo ComboBox disabilitato ha lo stesso colore del testo disabilitato. Ad esempio:

    Prima:

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

    Dopo:

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

    Inoltre, i pulsanti con lo stato attivo e disabilitati usano il colore del tema corretto.

    Prima:

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

    Dopo:

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

    Infine, in .NET Framework 4.7 e versioni precedenti, l'impostazione dello stile di un controllo ComboBox su Toolbar.ComboBoxStyleKey rende invisibile la freccia a discesa. Questo problema è stato risolto a partire da .NET Framework 4.7.1. Ad esempio:

    Prima:

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

    Dopo:

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

  • Controllo DataGrid

    A partire da .NET Framework 4.7.1, la freccia dell'indicatore di ordinamento nei controlli DataGrid usa ora i colori del tema corretti. Ad esempio:

    Prima:

    Screenshot of sort indicator arrow before improvements.

    Dopo:

    Screenshot of sort indicator arrow after improvements.

    Inoltre, in .NET Framework 4.7 e versioni precedenti, per lo stile di collegamento predefinito viene usato un colore non corretto al passaggio del mouse in modalità a contrasto elevato. Questo problema è stato risolto a partire da .NET Framework 4.7.1. Analogamente, le colonne della casella di controllo DataGrid usano i colori previsti per il riscontro dello stato attivo della tastiera a partire da .NET Framework 4.7.1.

    Prima:

    Screenshot of a link saying Click Me! in red.

    Dopo:

    Screenshot of a link saying Click Me! in yellow.

Per altre informazioni sui miglioramenti per l'accessibilità di WPF in .NET Framework 4.7.1, vedere Miglioramenti di accessibilità in WPF.

Miglioramenti per l'accessibilità di Windows Form

In .NET Framework 4.7.1 Windows Forms (WinForms) include modifiche per l'accessibilità nelle aree seguenti.

Miglioramento della visualizzazione in modalità a contrasto elevato

A partire da .NET Framework 4.7.1, vari controlli WinForms offrono un rendering migliorato nelle modalità a contrasto elevato disponibili nel sistema operativo. Windows 10 ha cambiato i valori di alcuni colori di sistema a contrasto elevato e Windows Form si basa sul framework Win32 di Windows 10. Per risultati ottimali, eseguire la versione più recente di Windows e acconsentire esplicitamente alle modifiche del sistema operativo più recenti aggiungendo un file app.manifest in un'applicazione di test e rimuovere il commento dalla riga del sistema operativo supportato Windows 10, in modo che abbia l'aspetto seguente:

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

Alcuni esempi di modifiche per il contrasto elevato includono:

  • I segni di spunta negli elementi MenuStrip sono più facili da visualizzare.

  • Gli elementi MenuStrip disabilitati sono più facili da visualizzare quando sono selezionati.

  • Il testo in un controllo Button selezionato è contrastato rispetto al colore della selezione.

  • Il testo disabilitato è più facile da leggere. Ad esempio:

    Prima:

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

    Dopo:

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

  • Miglioramenti per il contrasto elevato nella finestra di dialogo di eccezione del thread.

Supporto migliorato di Assistente vocale

Windows Forms in .NET Framework 4.7.1 include i seguenti miglioramenti per l'accessibilità per l'Assistente vocale:

  • Il controllo MonthCalendar è accessibile per l'Assistente vocale, così come da altri strumenti di automazione dell'interfaccia utente.

  • Il controllo CheckedListBox segnala all'Assistente vocale lo stato di selezione di un elemento, in modo che l'utente riceva notifica della modifica del valore di un elemento di elenco.

  • Il controllo DataGridViewCell segnala lo stato di sola lettura corretto all'Assistente vocale.

  • Assistente vocale può ora leggere il testo ToolStripMenuItem disabilitato, mentre in precedenza ignorava le voci di menu disabilitate.

Supporto avanzato per i modelli di accessibilità UIAutomation

A partire da .NET Framework 4.7.1, gli sviluppatori di strumenti di tecnologia per l'accessibilità possono sfruttare i modelli e le proprietà di accessibilità delle API comuni per numerosi controlli WinForms. Questi miglioramenti per l'accessibilità includono:

Esperienza migliorata per il visualizzatore proprietà

A partire da .NET Framework 4.7.1, Windows Forms include:

  • Migliori spostamenti tramite tastiera tra le varie finestre di selezione a discesa.
  • Riduzione dei punti di tabulazione non necessari.
  • Segnalazione migliore dei tipi di controllo.
  • Comportamento migliorato dell'Assistente vocale.

Controlli Web ASP.NET

A partire da .NET Framework 4.7.1 e Visual Studio 2017 versione 15.3, in ASP.NET è stato migliorato il funzionamento dei controlli Web ASP.NET con tecnologia di accessibilità in Visual Studio. Le modifiche includono quanto segue:

  • Modifiche per implementare criteri di accessibilità dell'interfaccia utente mancanti nei controlli, come la finestra di dialogo Aggiungi campo nella procedura guidata Visualizzazione dettagli o la finestra di dialogo Configura ListView nella procedura guidata ListView.

  • Modifiche per migliorare la visualizzazione nella modalità a contrasto elevato, ad esempio l'Editor campi del pager di dati.

  • Modifiche per migliorare la navigazione tramite tastiera per controlli, come la finestra di dialogo Campi nella procedura guidata Modifica campi del pager del controllo DataPager, la finestra di dialogo Configura ObjectContext o la finestra di dialogo Configura selezione dati della procedura guidata Configura origine dati.

Strumenti .NET SDK

Lo strumento Editor di configurazione (SvcConfigEditor.exe) e lo strumento Visualizzatore di tracce (SvcTraceViewer.exe) sono stati migliorati correggendo vari problemi di accessibilità. Molti erano problemi di lieve entità, come ad esempio un nome non definito o alcuni criteri dell'automazione interfaccia utente non implementati correttamente. È possibile che molti utenti non si siano accorti di questi valori non corretti. I clienti che usano le assistive technology, ad esempio le utilità per la lettura dello schermo, troveranno invece questi strumenti SDK più accessibili.

Tali miglioramenti modificano alcuni comportamenti precedenti, ad esempio l'ordine di attivazione della tastiera.

Progettazione flussi di lavoro di Windows Workflow Foundation (WF)

Le modifiche all'accessibilità in Progettazione flussi di lavoro includono quanto segue:

  • L'ordine di tabulazione viene modificato da sinistra a destra e dall'alto verso il basso in alcuni controlli:

  • Altre funzioni sono disponibili tramite tastiera:

    • Quando vengono modificate le proprietà di un'attività, i gruppi delle proprietà possono essere compressi tramite tastiera la prima volta che hanno lo stato attivo.

    • Le icone di avviso sono accessibili dalla tastiera.

    • Il pulsante Altre proprietà nella finestra Proprietà è accessibile dalla tastiera.

    • Tramite tastiera gli utenti possono accedere agli elementi dell'intestazione nei riquadri Argomenti e Variabili in Progettazione flussi di lavoro.

  • Maggiore visibilità degli elementi con stato attivo, ad esempio quando:

    • Aggiunta di righe alle griglie di dati usate in Progettazione flussi di lavoro e in ActivityDesigner.

    • Tabulazione all'interno dei campi nelle attività ReceiveReply e SendReply.

    • Impostazione di valori predefiniti per variabili o argomenti

  • Le utilità per la lettura dello schermo ora possono riconoscere correttamente:

    • Set di punti di interruzione in Progettazione flussi di lavoro.

    • Attività FlowSwitch<T>, FlowDecision e CorrelationScope.

    • Contenuto dell'attività Receive.

    • Tipo di destinazione per l'attività InvokeMethod.

    • Casella combinata Eccezione e sezione Finally nell'attività TryCatch.

    • Casella combinata Tipo di messaggio, barra di divisione nella finestra Aggiungi inizializzatori di correlazione, finestra Content Definition (Definizione contenuto) e finestra Definizione di CorrelatesOn nelle attività di messaggistica (Receive, Send, SendReply e ReceiveReply).

    • Transizioni della macchina a uno stato e destinazioni delle transazioni.

    • Annotazioni e connettori nelle attività FlowDecision.

    • Menu di scelta rapida per le attività.

    • Editor di valori di proprietà, pulsante Cancella ricerca, pulsanti di ordinamento Per categoria e In ordine alfabetico e finestra di dialogo Editor espressioni nella griglia delle proprietà.

    • Percentuale di zoom in Progettazione flussi di lavoro.

    • Separatore nelle attività Parallel e Pick.

    • Attività InvokeDelegate.

    • Finestra Seleziona tipi per le attività di dizionario (Microsoft.Activities.AddToDictionary<TKey,TValue>, Microsoft.Activities.RemoveFromDictionary<TKey,TValue> e così via).

    • Finestra Cerca e seleziona un tipo .NET.

    • Navigazioni in Progettazione flussi di lavoro.

  • Gli utenti che usano i temi a contrasto elevato noteranno molti miglioramenti nella visibilità di Progettazione flussi di lavoro e nei relativi controlli, ad esempio rapporti di contrasto più definiti tra gli elementi e caselle di selezione più evidenti per gli elementi con lo stato attivo.

Vedi anche