Neuerungen der Barrierefreiheit in .NET Framework

Mit dem .NET Framework entwickelte Anwendungen bieten mehr Barrierefreiheit für Benutzer. Durch Barrierefreiheitsfunktionen wird es einer Anwendung ermöglicht, den Benutzern von Hilfstechnologien ein angemessenes Erlebnis zu bieten. Ab .NET Framework 4.7.1 enthält das .NET Framework zahlreiche Verbesserungen hinsichtlich der Barrierefreiheit, die es Entwicklern ermöglichen, barrierefreie Anwendungen zu erstellen.

Barrierefreiheitsparameter

Wenn Ihre App auf .NET Framework 4.7 oder niedriger ausgerichtet ist, aber auf .NET Framework 4.7.1 oder höher ausgeführt wird, können Sie sie für Barrierefreiheitsfeatures konfigurieren. Sie können auch Ihre App für Legacy-Features konfigurieren (und Barrierefreiheitsfeatures außen vor lassen), wenn diese auf .NET Framework 4.7.1 oder höher ausgerichtet ist. Jede .NET Framework-Version, die Barrierefreiheitsfeatures umfasst, verfügt über einen versionsspezifischen Barrierefreiheitsparameter, den Sie dem <AppContextSwitchOverrides>-Element im Abschnitt <runtime> der Anwendungskonfigurationsdatei hinzufügen. Die folgenden Parameter werden unterstützt:

Version Schalter
.NET Framework 4.7.1 „Switch.UseLegacyAccessibilityFeatures“
.NET Framework 4.7.2 „Switch.UseLegacyAccessibilityFeatures.2“
.NET Framework 4.8 "Switch.UseLegacyAccessibilityFeatures.3"
11. August 2020: Kumulatives Update KB4569746 für .NET Framework 4.8 "Switch.UseLegacyAccessibilityFeatures.4"
.NET Framework 4.8.1 "Switch.UseLegacyAccessibilityFeatures.5"

Profitieren von Barrierefreiheitserweiterungen

Die neuen Barrierefreiheitsfunktionen werden standardmäßig für Anwendungen aktiviert, die .NET Framework 4.7.1 oder höher anzielen. Zusätzlich können Anwendungen, die eine frühere Version von .NET Framework anzielen, aber unter .NET Framework 4.7.1 oder höher ausgeführt werden, veraltete Verhaltensweisen für die Barrierefreiheit deaktivieren (und dadurch die Verbesserungen der Barrierefreiheit nutzen), indem Sie dem <AppContextSwitchOverrides>-Element im <runtime>-Abschnitt der Konfigurationsdatei der Anwendung einen Parameter hinzufügen und deren Wert auf false festlegen. Der folgende Codeausschnitt veranschaulicht, wie Sie die in .NET Framework 4.7.1 eingeführten Barrierefreiheitsverbesserungen aktivieren:

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

Wenn Sie die Barrierefreiheitsoptionen in einer höheren Version des .NET Framework aktivieren, müssen Sie ebenfalls die Features früherer Versionen aktivieren. Sie müssen das folgende <AppContextSwitchOverrides>-Element hinzufügen, um Ihre App so zu konfigurieren, dass Sie die Verbesserungen der Barrierefreiheit sowohl in .NET Framework 4.7.1 als auch in .NET Framework 4.7.2 nutzen können:

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

Sie müssen das folgende <AppContextSwitchOverrides>-Element hinzufügen, um Ihre App so zu konfigurieren, dass Sie die Verbesserungen hinsichtlich der Barrierefreiheit in NET Framework 4.7.1, 4.7.2, 4.8 und das kumulative Update von August 2020 für .NET Framework 4.8 nutzen können:

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

Wiederherstellen von Legacyverhalten

Für Anwendungen, die mindestens auf .NET Framework 4.7.1 ausgelegt sind, können die Barrierefreiheitsfeatures deaktiviert werden, indem folgende Optionen mit dem Wert zum <AppContextSwitchOverrides>-Element im true<runtime>-Abschnitt der Anwendungskonfigurationsdatei hinzugefügt werden. Beispielsweise deaktiviert die folgende Konfiguration die Barrierefreiheitsfeatures, die in .NET Framework 4.7.2 eingeführt wurden:

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

Neuerungen bei der Barrierefreiheit in .NET Framework 4.8.1

.NET Framework 4.8.1 enthält neue Barrierefreiheitsfunktionen für die folgenden Bereiche:

Windows Forms

Weitere und verbesserte UIA-Darstellungen

Vor .NET Framework 4.8.1 wurde von Windows Forms eine Reihe von UIA-Mustern zur Unterstützung von Hilfstechnologie für die Interaktion mit Anwendungen nicht unterstützt. Dies konnte dazu führen, dass von Sprachausgabelösungen unvollständige oder falsche Informationen gemeldet wurden. Außerdem konnte dies Auswirkungen auf wichtige Funktionen wie das Bewegen eines Cursors durch den Text in einem Steuerelement vom Typ TextBox haben. Mit .NET Framework 4.8.1 wurden alle erforderlichen Muster für die gängigen Steuerelemente implementiert. Diese neue Funktion ermöglicht Benutzer*innen von Hilfstechnologien eine viel umfangreichere Anwendungsinteraktion.

  • Unterstützung des UIA-Musters für die Erweiterung/Reduzierung zum Steuerelement DateTimePicker hinzugefügt
  • UIA-Unterstützung für das Steuerelement MonthCalendar hinzugefügt. Jetzt können Hilfstechnologietools wie die Sprachausgabe durch die einzelnen Datumsangaben im Steuerelement navigieren.
  • Textmusterunterstützung für alle textbasierten Steuerelemente implementiert – einschließlich TextBox, MaskedTextBox, PropertyGrid (Bearbeitungssteuerelement), DataGridViewTextBoxCell, ToolStripTextBox und DomainUpDown.
  • ToolTip entspricht jetzt den WCAG2.1-Richtlinien und ist in Windows 11 persistent und schließbar, und Benutzer*innen können darauf zeigen. Änderungen am QuickInfo-Verhalten beschränken sich auf Windows 11-Systeme, auf denen .NET Framework 4.8.1 installiert ist, und gelten nur für Anwendungen, bei denen kein Timeout für die QuickInfo festgelegt wurde. Persistente QuickInfos können entweder mithilfe der ESC-TASTE oder STRG-TASTE oder durch Navigieren zu einem Steuerelement mit einer anderen festgelegten QuickInfo geschlossen werden.

Verschiedene Fehlerkorrekturen für bereits vorhandene Barrierefreiheitsfunktionen

  • Die Sprachausgabe kann jetzt auf ein leeres Steuerelement vom Typ DataGridView fokussiert werden.
  • Es wurde ein Problem behoben, das dazu führte, dass Sprachausgaben ausgeblendete Spalten zählen, wenn sie die Spaltenanzahl in einem Steuerelement vom Typ DataGridView ausgeben.
  • Es wurde ein Problem behoben, das dazu führte, dass DataGridView die in DataGridviewCellStyle festgelegten Schriftarteinstellungen ignoriert werden, wenn sich die Eigenschaft Font des zugrunde liegenden Formulars von DefaultFont unterscheidet.
  • Die Eigenschaft AccessibleName der internen Scrollleisten des Steuerelements DataGridView wurde aktualisiert, um den Text „ScrollBar“ zu entfernen.
  • Die Farbe eines Elements vom Typ DataGridViewLinkCell beim Auswählen der Zelle wurde korrigiert.
  • Es wurde ein Problem mit benutzerdefinierten Steuerelementen vom Typ DataGridView behoben, bei denen für benutzerdefinierte Elemente vom Typ DataGridViewCell keine Angabe für ControlType oder LocalizedControlType bereitgestellt wurde.
  • Das Helligkeitsverhältnis wurde für Steuerelemente vom Typ ToolStripButton, bei denen ToolStripRenderMode auf System festgelegt wurde, auf 3,5:1 aktualisiert.
  • Die Tastaturnavigation in einem ToolStrip wurde verbessert, wenn es sich um ein Element vom Typ ToolStripComboBox handelt.
  • Die Hintergrundfarbe von ToolStripButton wurde für den Modus mit hohem Kontrast aktualisiert.
  • Es wurde sichergestellt, dass ein umgebendes Rechteck für ToolStripSeparator an die Hilfstechnologie gemeldet wird.
  • Es wurde ein Problem behoben, das dazu führen konnte, dass die JAWS-Sprachausgabe beim Lesen des Steuerelements PropertyGrid abstürzt.
  • Es wurde sichergestellt, dass die UIA-Hierarchiestruktur für ein Steuerelement vom Typ PropertyGrid aktualisiert wird, wenn ein komplexer Eintrag wie Font erweitert wird. Außerdem wurde sichergestellt, dass die Struktur ordnungsgemäß aktualisiert wird, wenn der Eintrag später reduziert und nicht mehr sichtbar ist.
  • Kategorien vom Typ PropertyGrid verfügen jetzt über den lokalisierten Steuerelementtyp PropertyGrid category.
  • Es wurde ein Problem mit ComboBox behoben, das dazu führen konnte, dass die App unter Accessibility Insights für Windows abstürzt.
  • Die Rahmenfarbe für Button wurde aktualisiert, um den Kontrast in den Standardfarben zu erhöhen.
  • Für den Zugriff auf die Schaltflächen vom Typ ControlBox eines maximierten untergeordneten MDI-Formulars wurden Hilfstechnologietools aktiviert.
  • Die Eigenschaft AccessibleName eines Steuerelements vom Typ DomainUpDown verfügt über einen neuen Standardwert (eine leere Zeichenfolge). Die leere Zeichenfolge soll Entwickler*innen zur Erstellung eines aussagekräftigen Namens animieren, anstatt den vorherigen nicht leeren Standardwert zu übernehmen.
  • Die Eigenschaft AccessibleName der Schaltfläche „Drucken“ in PrintPreviewDialog wurde von „Druckschaltfläche“ in „Drucken“ geändert, um Redundanz zu vermeiden, wenn Sprachausgaben das Steuerelement und seinen Typ ausgeben.
  • UIA-Listensteuerelemente wurden aktualisiert, um ein leeres Listenelement zu entfernen, wenn eine PropertyGrid-Zelle vom Typ ComboBox geschlossen und nicht mehr sichtbar ist.

Windows Presentation Foundation (WPF)

Verbesserungen bei der barrierefreien Behandlung von QuickInfos

Zur Verbesserung der Erfahrung kann in dieser Version eine QuickInfo im aktuellen Fenster einfach mithilfe der ESC-TASTE, mithilfe der STRG-TASTE (ohne Tastenkombination) oder mithilfe der Tastenkombination STRG+UMSCHALT+F10 geschlossen werden. Die Wirkung der ESC-TASTE wurde in dieser Version auf das aktuelle Fenster beschränkt. Bislang wurde die Taste auf jede geöffnete QuickInfo in der Anwendung angewendet. WPF-QuickInfos entsprechen standardmäßig den WCAG2.1-Richtlinien. Sie sind somit persistent und schließbar, und Benutzer*innen können darauf zeigen.

Neuerungen bei den Barrierefreiheitsfeatures im kumulativen Update für .NET Framework 4.8 vom 11. August 2020

Das kumulative Update KB4569746 für .NET Framework 4.8 vom 11. August 2020 führt neue Barrierefreiheitsfeatures für Windows Forms ein:

  • Ein Problem mit der Sprachausgabe von PropertyGrid-Steuerelementen und dem Status von Kategorien (aufgeklappt/zugeklappt) wurde behoben.

  • Die Barrierefreiheitsmuster des Steuerelements PropertyGrid und dessen inneren Elementen wurden aktualisiert.

  • Die barrierefreien Namen der inneren Elemente des Steuerelements PropertyGrid wurden aktualisiert und werden nun korrekt von der Sprachausgabe wiedergegeben.

  • Ein Problem mit Begrenzungsrahmen für barrierefreie Eigenschaften des Steuerelements PropertyGridView wurde behoben.

  • Die Sprachausgabe gibt den Status der Zellen des Kombinationsfelds DataGridView (aufgeklappt/zugeklappt) jetzt korrekt wieder.

Neuerungen der Barrierefreiheit in .NET Framework 4.8

.NET Framework 4.8 enthält neue Barrierefreiheitsfunktionen für die folgenden Bereiche:

Windows Forms

In .NET Framework 4.8 bieten Windows Forms jetzt Unterstützung für LiveRegions und Benachrichtigungsereignisse für viele häufig verwendete Steuerelemente. Es bietet auch Unterstützung für QuickInfos, wenn ein Benutzer mit der Tastatur zu einem Steuerelement navigiert.

Unterstützung für UIA-LiveRegions in den Bezeichnungen und StatusStrips

UIA LiveRegions ermöglichen es Anwendungsentwicklern, Sprachausgaben über eine Textänderung in einem Steuerelement zu informieren, das sich außerhalb des Bereichs befindet, in dem der Benutzer arbeitet. Dies ist z.B. für ein StatusStrip-Steuerelement nützlich, das einen Verbindungsstatus anzeigt. Wenn die Verbindung unterbrochen wird und sich der Status ändert, kann der Entwickler die Sprachausgabe benachrichtigen.

Ab .NET Framework 4.8 implementiert Windows Forms UIA-LiveRegions für sowohl Label- als auch StatusStrip-Steuerelemente. Der folgende Code verwendet die LiveRegion beispielsweise in einem Label-Steuerelement mit dem Namen label1:

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

…
Label1.Text = "Ready!";

Die Sprachausgabe kündigt „Bereit“ an, unabhängig davon, wo der Benutzer mit der Anwendung gerade interagiert.

Sie können Ihr UserControl ebenfalls als LiveRegion implementieren:

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

UIA-Benachrichtigungsereignisse

Das UIA-Benachrichtigungsereignis, das mit dem Windows 10 Fall Creators Update eingeführt wurde, ermöglicht es Ihrer App, ein UIA-Ereignis auszulösen, was dazu führt, dass die Sprachausgabe einfach eine Ankündigung basierend auf dem Text macht, den Sie mit dem Ereignis bereitstellen. Dafür muss in der Benutzeroberfläche kein entsprechendes Steuerelement vorhanden sein. In einigen Szenarien ist dies eine einfache Möglichkeit, um die Barrierefreiheit Ihrer App erheblich zu verbessern. Auch kann damit über den Fortschritt eines Prozesses zu informiert werden, der viel Zeit in Anspruch nehmen kann. Weitere Informationen über UIA-Benachrichtigungsereignisse finden Sie in Can your desktop app leverage the new UI Notification event? (Kann Ihre Desktop-App das neue UI-Benachrichtigungsereignis nutzen?).

Im folgenden Beispiel wird ein Benachrichtigungsereignis ausgelöst:

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

QuickInfos für den Tastaturzugriff

In Anwendungen, die auf .NET Framework 4.7.2 und frühere Versionen abzielen, kann ein Steuerelement tooltip nur durch Bewegen eines Mauszeigers in das Steuerelement angezeigt werden. Ab .NET Framework 4.8 kann ein Tastaturbenutzer die QuickInfo eines Steuerelements aufrufen, indem das Steuerelement mit einer Tabulatortaste oder Pfeiltasten mit oder ohne Zusatztasten fokussiert wird. Für diese Verbesserungen der Barrierefreiheit ist ein zusätzlicher AppContext-Schalter erforderlich:

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

Die folgende Abbildung zeigt die QuickInfo, wenn der Benutzer eine Schaltfläche mit der Tastatur ausgewählt hat.

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

Windows Presentation Foundation (WPF)

Ab .NET Framework 4.8 enthält WPF eine Reihe von Verbesserungen der Barrierefreiheit.

Die Sprachausgabe kündigt keine Elemente mit der Sichtbarkeit „Collapsed“ oder „Hidden“ mehr an

Elemente mit der Sichtbarkeit „Collapsed“ oder „Hidden“ werden von der Sprachausgabe nicht mehr angekündigt. Benutzeroberflächen, die Elemente mit einer Sichtbarkeit Visibility.Collapsed oder Visibility.Hidden enthalten, können durch die Sprachausgabe falsch interpretiert werden, wenn sie dem Benutzer angekündigt werden. Ab .NET Framework 4.8 enthält WPF keine komprimierten oder ausgeblendeten Elemente mehr in der Steuerelementansicht der UIAutomation-Struktur, sodass die Sprachausgabe diese Elemente nicht mehr ankündigen kann.

SelectionTextBrush-Eigenschaft für die Verwendung mit einer nicht Adorner-basierten Textauswahl

In .NET Framework 4.7.2 wurde in WPF die Option hinzugefügt, eine TextBox- und PasswordBox-Textauswahl zu zeichnen, ohne die Adorner-Ebene zu verwenden. Die Vordergrundfarbe des markierten Texts in diesem Szenario wurde von SystemColors.HighlightTextBrush vorgegeben.

.NET Framework 4.8 fügt eine neue Eigenschaft, SelectionTextBrush, hinzu, die es Entwicklern ermöglicht, den spezifischen Pinsel für den ausgewählten Text auszuwählen, wenn sie eine nicht Adorner-basierte Textauswahl verwenden. Diese Eigenschaft funktioniert nur bei TextBoxBase-basierten Steuerelementen und dem PasswordBox-Steuerelement in WPF-Anwendungen, bei denen die nicht auf Adorner basierende Textauswahl aktiviert ist. Sie funktioniert nicht für das RichTextBox-Steuerelement. Wenn die nicht auf Adorner basierende Textauswahl nicht aktiviert ist, wird diese Eigenschaft ignoriert.

Um diese Eigenschaft zu verwenden, fügen Sie sie einfach zu Ihrem XAML-Code hinzu, und verwenden Sie den entsprechenden Pinsel oder die passende Bindung. Die sich daraus ergebende Textauswahl sieht folgendermaßen aus:

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

Sie können die Verwendung der Eigenschaften SelectionBrush und SelectionTextBrush kombinieren, um jede beliebige Hintergrund- und Vordergrundfarbkombination zu generieren, die Sie für zweckmäßig halten.

Unterstützung für die UIAutomation ControllerFor-Eigenschaft

Die ControllerFor-Eigenschaft von UIAutomation gibt ein Array von Automatisierungselementen zurück, die von dem Automatisierungselement geändert werden, das diese Eigenschaft unterstützt. Diese Eigenschaft wird häufig bei der Vorschlagsuche verwendet. ControllerFor wird verwendet, wenn ein Automatisierungselement ein oder mehrere Segmente der Benutzeroberfläche der Anwendung oder des Desktops beeinflusst. Andernfalls ist es schwierig, die Auswirkungen des Steuerelementvorgangs den Elementen der Benutzeroberfläche zuzuordnen. Dieses Feature fügt die Möglichkeit hinzu, dass Steuerelemente einen Wert für die ControllerFor-Eigenschaft bereitstellen.

.NET Framework 4.8 fügt eine neue virtuelle Methode hinzu: GetControlledPeersCore(). Auf einen Wert für die ControllerFor Eigenschaft einfach diese Methode überschreiben und Zurückgeben einer List<AutomationPeer> für die Steuerelemente, die von diesem bearbeiteten 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;
   }
}

QuickInfos für den Tastaturzugriff

In .NET Framework 4.7.2 und früheren Versionen werden QuickInfos nur angezeigt, wenn der Benutzer den Mauszeiger über ein Steuerelement bewegt. In .NET Framework 4.8 werden QuickInfos auch beim Fokussieren mit der Tastatur sowie über eine Tastenkombination angezeigt.

Um dieses Feature zu aktivieren, muss eine Anwendung .NET Framework 4.8 als Ziel verwenden oder sich mit den Switch.UseLegacyAccessibilityFeatures.3- und Switch.UseLegacyToolTipDisplay-AppContext-Schaltern anmelden. Nachfolgend finden Sie die Konfigurationsdatei für eine Beispielanwendung:

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

Nach der Aktivierung zeigen alle Steuerelemente, die eine QuickInfo enthalten, diese an, sobald die Tastatur auf das Steuerelement fokussiert. Die QuickInfo kann im Laufe der Zeit oder bei einer Änderung des Tastaturfokus deaktiviert werden. Benutzer*innen können die QuickInfo auch manuell mithilfe der neuen Tastenkombination STRG+UMSCHALT+F10 schließen. Nachdem die QuickInfo geschlossen wurde, kann sie mithilfe der gleichen Tastenkombination wieder angezeigt werden.

Hinweis

Menüband-QuickInfos auf Ribbon-Steuerelementen werden nicht beim Tastaturfokus angezeigt, sondern nur über die Tastenkombination.

Unterstützung für SizeOfSet- und PositionInSet-UIAutomation-Eigenschaften hinzugefügt

Windows 10 hat zwei neue UIAutomation-Eigenschaften eingeführt, SizeOfSet und PositionInSet, die von Anwendungen verwendet werden, um die Anzahl der Elemente in einem Satz zu beschreiben. UIAutomation-Clientanwendungen wie die Sprachausgabe können dann eine Anwendung hinsichtlich dieser Eigenschaften abfragen und eine genaue Darstellung der Benutzeroberfläche der Anwendung ankündigen.

Ab .NET Framework 4.8 stellt WPF diese beiden Eigenschaften für UIAutomation in WPF-Anwendungen bereit. Dafür stehen zwei Methoden zur Verfügung:

  • Verwenden von Abhängigkeitseigenschaften

    WPF fügt zwei neue Abhängigkeitseigenschaften, AutomationProperties.SizeOfSet und AutomationProperties.PositionInSet, hinzu. Ein Entwickler kann diese Werte mit XAML festlegen:

    <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>
    
  • Überschreiben von virtuellen AutomationPeer-Methoden

    Die virtuellen Methoden GetSizeOfSetCore() und GetPositionInSetCore() wurden der Klasse AutomationPeer hinzugefügt. Ein Entwickler kann diese Werte für SizeOfSet und PositionInSet durch Überschreiben dieser Methode bereitstellen, wie im folgenden Beispiel gezeigt:

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

Darüber hinaus stellen Elemente in ItemsControl-Instanzen automatisch einen Wert für diese Eigenschaften ohne zusätzliche Maßnahmen des Entwicklers bereit. Wenn ein ItemsControl gruppiert ist, wird die Sammlung von Gruppen als Satz dargestellt, und jede Gruppe wird als separater Satz gezählt. Dabei gibt jedes Element innerhalb dieser Gruppe seine Position innerhalb dieser Gruppe sowie die Größe der Gruppe an. Automatische Werte werden durch Virtualisierung nicht beeinflusst. Selbst wenn ein Element nicht realisiert wird, wird es dennoch auf die Gesamtgröße des Satzes angerechnet und beeinflusst die Position im Satz seiner gleichgeordneten Elemente.

Automatische Werte werden nur bereitgestellt, wenn die Anwendung auf .NET Framework 4.8 abzielt. Für Anwendungen, die auf eine frühere Version von .NET-Frameworks abzielen, können Sie den Switch.UseLegacyAccessibilityFeatures.3-AppContext-Schalter einrichten, wie in der folgenden App.config-Datei gezeigt:

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

Workflow-Designer von Windows Workflow Foundation (WF)

Der Workflow-Designer umfasst in .NET Framework 4.8 folgende Änderungen:

  • Benutzer, die die Sprachausgabe verwenden, werden Verbesserungen bei FlowSwitch-case-Bezeichnungen feststellen.

  • Benutzer, die die Sprachausgabe verwenden, werden Verbesserungen bei Schaltflächenbeschreibungen feststellen.

  • Benutzer, die Designs mit hohem Kontrast verwenden, werden Verbesserungen in der Sichtbarkeit des Workflow-Designers und dessen Steuerelementen feststellen. Dazu zählen verbesserte Kontrastverhältnisse zwischen Elementen und leichter erkennbare Auswahlfelder für Fokuselemente.

Wenn Ihre Anwendung auf .NET Framework 4.7.2 oder eine frühere Version abzielt, können Sie diese Änderungen übernehmen, indem Sie den Switch.UseLegacyAccessibilityFeatures.3-AppContext-Schalter in Ihrer Anwendungskonfigurationsdatei auf false festlegen. Weitere Informationen finden Sie im Abschnitt Profitieren von Barrierefreiheitsverbesserungen in diesem Artikel.

Neuerungen der Barrierefreiheit in .NET Framework 4.7.2

.NET Framework 4.7.2 enthält neue Barrierefreiheitsfunktionen für die folgenden Bereiche:

Windows Forms

Vom Betriebssystem definierte Farben in Designs mit hohem Kontrast

Ab .NET Framework 4.7.2 verwendet Windows Forms vom Betriebssystem definierte Farben in Designs mit hohem Kontrast. Dies hat Auswirkungen auf die folgenden Steuerelemente:

Verbesserungen der Sprachausgabe

Ab .NET Framework 4.7.2 treten die folgenden Verbesserungen der Unterstützung der Sprachausgabe in Kraft:

  • Sie kündigt jetzt den Wert der ToolStripMenuItem.ShortcutKeys-Eigenschaft an, wenn sie den Text eines ToolStripMenuItem ankündigt.

  • Sie gibt jetzt an, wenn die Enabled-Eigenschaft von ToolStripMenuItem auf false festgelegt ist.

  • Sie stellt jetzt Feedback zum Zustand eines Kontrollkästchens bereit, wenn die ListView.CheckBoxes-Eigenschaft auf true festgelegt ist.

  • Die Fokusreihenfolge des Scanmodus der Sprachausgabe ist mit der visuellen Reihenfolge der Steuerelemente für das ClickOnce-Downloaddialogfenster konsistent.

DataGridView-Verbesserungen

Ab .NET Framework 4.7.2 wurden mit dem DataGridView-Steuerelement die folgenden Barrierefreiheitsverbesserungen eingeführt:

Verbesserte visuelle Hinweise

  • Die Steuerelemente RadioButton und CheckBox mit einer leeren Text-Eigenschaft zeigen einen Fokusindikator an, wenn sie den Fokus erhalten.

Verbesserte Unterstützung für das Eigenschaftenraster

  • Die untergeordneten Elemente des Steuerelements PropertyGrid geben jetzt nur dann true für die Eigenschaft IsReadOnlyProperty zurück, wenn ein PropertyGrid-Element aktiviert ist.

  • Die untergeordneten Elemente des PropertyGrid-Steuerelements geben nur dann false für die IsEnabledProperty-Eigenschaft zurück, wenn ein PropertyGrid-Element vom Benutzer geändert werden kann.

Verbesserte Tastaturnavigation

Windows Presentation Foundation (WPF)

Änderungen an den Steuerelementen CheckBox und RadioButton

In .NET Framework 4.7.1 und früheren Versionen weisen die WPF-Steuerelemente System.Windows.Controls.CheckBox und System.Windows.Controls.RadioButton inkonsistente und im klassischen Design sowie im Design mit hohem Kontrast falsche visuelle Fokuselemente auf. Diese Probleme treten in Fällen auf, in denen für die Steuerelemente keine Inhalte festgelegt sind. Dadurch kann der Übergang zwischen Designs verwirrend wirken und das visuelle Fokuselement schwer zu erkennen sein.

In .NET Framework, 4.7.2 sind diese visuellen Elemente jetzt designübergreifend konsistenter und im klassischen Design sowie im Design mit hohem Kontrast leichter zu erkennen.

WinForms-Steuerelemente, die in einer WPF-Anwendungen gehostet werden

In .NET Framework 4.7.1 und früheren Versionen konnten Benutzer für das in einer WPF-Anwendung gehostete Steuerelement nicht die TAB-TASTE verwenden, um die WinForms-Ebene zu verlassen, wenn es sich bei dem ersten Steuerelement auf dieser Ebene um das WPF-Steuerelement ElementHost handelte. In .NET Framework 4.7.2 können Benutzer jetzt die WinForms-Ebene über die TAB-TASTE verlassen.

Es kann jedoch sein, dass automatisierte Anwendungen, für die der Fokus dauerhaft auf der WinForms-Ebene liegen muss, nicht mehr einwandfrei funktionieren.

Neuerungen der Barrierefreiheit in .NET Framework 4.7.1

.NET Framework 4.7.1 enthält neue Barrierefreiheitsfunktionen für die folgenden Bereiche:

Windows Presentation Foundation (WPF)

Verbesserungen der Sprachausgabe

Wenn die Verbesserungen der Barrierefreiheit aktiviert sind, enthält .NET Framework 4.7.1 folgende Verbesserungen, die sich auf die Sprachausgabe auswirken:

  • In .NET Framework 4.7 und früher wurden Expander-Steuerelemente von der Sprachausgabe als Schaltflächen ausgegeben. Ab .NET Framework 4.7.1 werden diese ordnungsgemäß als erweiterbare bzw. reduzierbare Gruppen ausgegeben.

  • In .NET Framework 4.7 und früher wurden DataGridCell-Steuerelemente von der Sprachausgabe als „benutzerdefiniert“ ausgegeben. Ab .NET Framework 4.7.1 werden diese ordnungsgemäß als (lokalisierte) Datenrasterzellen ausgegeben.

  • Ab .NET Framework 4.7.1 gibt die Sprachausgabe den Namen einer bearbeitbaren ComboBox-Klasse aus.

  • In .NET Framework 4.7 und früher wurden PasswordBox-Steuerelemente als „Es befindet sich kein Element in der Ansicht.“ ausgegeben oder wiesen andere fehlerhafte Verhaltensweisen auf. Dieses Problem wurde in .NET Framework 4.7.1 behoben.

Unterstützung von dynamischen Bereichen für die UIAutomation

Die Sprachausgabe unterstützt die Benutzer beim Lesen der Inhalte der Benutzeroberfläche einer Anwendung. Dies geschieht üblicherweise durch eine Sprachausgabe des Texts der Inhalte der Benutzeroberfläche, die den Fokus besitzen. Wenn ein Element der Benutzeroberfläche sich jedoch verändert oder den Fokus nicht besitzt, wird der Benutzer möglicherweise nicht benachrichtigt, wodurch ihm wichtige Informationen entgehen können. Durch dynamische Bereiche soll dieses Problem behoben werden. Entwickler können diese verwenden, um der Sprachausgabe oder einem anderen UIAutomation-Client mitzuteilen, dass eine wichtige Änderung an einem Element der Benutzeroberfläche vorgenommen wurde. Die Sprachausgabe kann dann entscheiden, wie und wann der Benutzer über diese Änderung informiert wird.

Folgende APIs wurden zu WPF hinzugefügt, um dynamische Bereiche zu unterstützen:

Sie können einen dynamischen Bereich erstellen, indem Sie die Eigenschaft AutomationProperties.LiveSetting wie im folgenden Beispiel dargestellt auf das relevante Element festlegen:

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

Wenn die Daten im dynamischen Bereich geändert werden und diese Änderung der Sprachausgabe mitgeteilt werden soll, müssen Sie wie im folgenden Beispiel dargestellt explizit ein Ereignis auslösen.

var peer = FrameworkElementAutomationPeer.FromElement(myTextBlock);

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

Hoher Kontrast

Ab .NET Framework 4.7.1 wurden Verbesserungen am Design „Hoher Kontrast“ für verschiedene WPF-Steuerelemente vorgenommen. Diese sind nun sichtbar, wenn das HighContrast-Design festgelegt ist. Dazu gehören:

  • Expander-Steuerelement

    Das visuelle Fokuselement für das Steuerelement Expander ist jetzt sichtbar. Das visuelle Tastaturelement für die ComboBox-, ListBox- und RadioButton-Steuerelemente wird ebenfalls angezeigt. Zum Beispiel:

    Vorher:

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

    Nachher:

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

  • CheckBox- und RadioButton-Steuerelemente

    Der Text in den CheckBox- und RadioButton-Steuerelementen ist nun leichter zu erkennen, wenn das Design mit hohem Kontrast ausgewählt ist. Zum Beispiel:

    Vorher:

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

    Nachher:

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

  • ComboBox-Steuerelement

    Ab .NET Framework 4.7.1 hat der Rahmen eines deaktivierten ComboBox-Steuerelements die gleiche Farbe wie der deaktivierte Text. Zum Beispiel:

    Vorher:

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

    Nachher:

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

    Darüber hinaus verwenden deaktivierte Schaltflächen und Schaltflächen mit Fokus das richtige Farbdesign.

    Vorher:

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

    Nachher:

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

    In .NET Framework 4.7 und früher führte das Festlegen des Formats eines ComboBox-Steuerelements auf Toolbar.ComboBoxStyleKey dazu, dass der Dropdownpfeil nicht angezeigt wurde. Dieses Problem wurde in .NET Framework 4.7.1 behoben. Zum Beispiel:

    Vorher:

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

    Nachher:

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

  • DataGrid-Steuerelement

    Ab .NET Framework 4.7.1 verwendet der Pfeil für die Sortieranzeige in den DataGrid-Steuerelementen das richtige Farbdesign. Zum Beispiel:

    Vorher:

    Screenshot of sort indicator arrow before improvements.

    Nachher:

    Screenshot of sort indicator arrow after improvements.

    Darüber hinaus wurde in .NET Framework 4.7 und früher das Standarddesign für Links geändert, wodurch Links beim Bewegen der Maus über diese im Modus mit hohem Kontrast in der falschen Farbe angezeigt wurden. Dieses Problem wurde in .NET Framework 4.7.1 behoben. Auf ähnliche Weise verwenden Spalten des Kontrollkästchens DataGrid ab .NET Framework 4.7.1 die erwarteten Farben für das Feedback des Tastaturfokus.

    Vorher:

    Screenshot of a link saying Click Me! in red.

    Nachher:

    Screenshot of a link saying Click Me! in yellow.

Weitere Informationen zu Verbesserungen der WPF-Barrierefreiheit in .NET Framework 4.7.1 finden Sie unter Verbesserung der Barrierefreiheit in WPF.

Verbesserung der Barrierefreiheit von Windows Forms

In .NET Framework 4.7.1 enthält Windows Forms (WinForms) Verbesserungen der Barrierefreiheit für folgende Bereiche:

Verbesserte Anzeige im Modus mit hohem Kontrast

Ab .NET Framework 4.7.1 bieten viele WinForms-Steuerelemente ein verbessertes Rendering für die Modi mit hohem Kontrast, die im Betriebssystem verfügbar sind. In Windows 10 wurden die Werte für einige Systemfarbe im Design mit hohem Kontrast geändert, und Windows Forms basiert auf dem Win32-Framework von Windows 10. Verwenden Sie für die besten Ergebnisse die aktuelle Version von Windows, und aktivieren Sie die neuesten Änderungen des Betriebssystems, indem Sie eine Datei vom Typ „app.manifest“ in einer Testanwendung hinzufügen und die Auskommentierung der Zeile zum unterstützen Windows 10-Betriebssystem aufheben, sodass sie wie folgt aussieht:

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

Folgende Änderungen wurden am Design mit hohem Kontrast vorgenommen:

  • Die Kontrollkästchen der MenuStrip-Elemente können einfacher angezeigt werden.

  • Wenn diese aktiviert werden, können deaktivierte MenuStrip-Elemente einfacher angezeigt werden.

  • Der Text in einem ausgewählten Button-Kontrollkästchen bildet einen Kontrast zur Auswahlfarbe.

  • Deaktivierter Text ist einfacher zu lesen. Zum Beispiel:

    Vorher:

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

    Nachher:

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

  • Verbesserungen am Design mit hohem Kontrast im Dialogfeld der Threadausnahme.

Verbesserte Unterstützung für die Sprachausgabe

Windows Forms in .NET Framework 4.7.1 enthält folgende Verbesserungen für die Barrierefreiheit der Sprachausgabe:

  • Auf das MonthCalendar-Steuerelement kann über die Sprachausgabe sowie über andere Tools zur Automatisierung der Benutzeroberfläche zugegriffen werden.

  • Das CheckedListBox-Steuerelement teilt der Sprachausgabe mit, wenn der Aktivierungszustand eines Elements geändert wurde, sodass der Benutzer darüber benachrichtigt wird, dass der Wert eines Listenelements verändert wurde.

  • Das DataGridViewCell-Steuerelement teilt der Sprachausgabe den richtigen schreibgeschützten Status mit.

  • Die Sprachausgabe kann nun deaktivierten ToolStripMenuItem-Text ausgeben, während deaktivierte Menüelemente zuvor übersprungen wurden.

Verbesserte Unterstützung für die Barrierefreiheitsmuster der UIAutomation

Ab .NET Framework 4.7.1 können die Entwickler von Tools für Barrierefreiheitstechnologien allgemeine API-Barrierefreiheitsmuster und -eigenschaften für mehrere WinForms-Steuerelemente verwenden. Folgende Verbesserungen der Barrierefreiheit wurden vorgenommen:

Verbesserter Eigenschaftenbrowser

Ab .NET Framework 4.7.1 enthält Windows Forms Folgendes:

  • Eine verbesserte Tastaturnavigation durch die verschiedenen Fenster der Dropdownauswahl
  • Eine Verringerung unnötiger Tabstopps
  • Eine verbesserte Berichterstellung der Steuerelementtypen
  • Ein verbessertes Verhalten der Sprachausgabe

ASP.NET-Websteuerelemente

Ab .NET Framework 4.7.1 und Visual Studio 2017 Version 15.3 arbeiten ASP.NET-Websteuerelemente effizienter mit den Funktionen für die Barrierefreiheit in Visual Studio zusammen. Dazu gehören folgende Änderungen:

  • Änderungen, durch die fehlende Barrierefreiheitsmuster für Steuerelemente der Benutzeroberfläche implementiert werden. Zu diesen Steuerelementen zählen z.B. das Dialogfeld Feld hinzufügen im Detailansicht-Assistenten oder das Dialogfeld ListView konfigurieren im ListView-Assistenten.

  • Änderungen zur Verbesserung der Anzeige im Modus für hohe Kontraste, z.B. beim DataPager-Feld-Editor.

  • Änderungen zur Verbesserung der Benutzerfreundlichkeit bei der Tastaturnavigation für Steuerelemente, z.B. beim Dialogfeld Felder im Assistenten für das Bearbeiten von Pagerfeldern des DataPager-Steuerelements, beim Dialogfeld ObjectContext konfigurieren oder beim Dialogfeld Datenauswahl konfigurieren des Assistenten zum Konfigurieren der Datenquelle.

.NET SDK-Tools

Das Configuration Editor-Tool (SvcConfigEditor.exe) und das Service Trace Viewer-Tool (SvcTraceViewer.exe) wurden verbessert, indem verschiedene Barrierefreiheitsprobleme verbessert wurden. In den meisten Fälle handelte es sich um kleinere Probleme, durch die ein Name nicht definiert wurde oder bestimmte Muster für die Benutzeroberflächenautomatisierung nicht richtig implementiert wurden. Obwohl viele Benutzer diese falschen Werte nicht bemerken würden, erhöhen die SDK-Tools die Benutzerfreundlichkeit für Kunden, die Hilfstechnologien wie die Sprachausgabe verwenden.

Durch diese Verbesserungen ändert sich vorheriges Verhalten wie die Reihenfolge des Tastaturfokus.

Workflow-Designer von Windows Workflow Foundation (WF)

Die Barrierefreiheitsänderungen im Workflow-Designer umfassen Folgendes:

  • Die Aktivierreihenfolge wurde bei manchen Steuerelementen in „Von links nach rechts“ und in „Von oben nach unten“ geändert:

  • Weitere Funktionen sind über die Tastatur verfügbar:

    • Beim Bearbeiten der Eigenschaften einer Aktivität können die Eigenschaftengruppen über die Tastatur reduziert werden, wenn diese zum ersten Mal fokussiert werden.

    • Auf Warnsymbole kann über die Tastatur zugegriffen werden.

    • Auf die Schaltfläche Weitere Eigenschaften im Fenster Eigenschaften kann über die Tastatur zugegriffen werden.

    • Tastaturbenutzer können auf die Headerelemente in den Bereichen Argumente und Variablen des Workflow-Designers zugreifen.

  • Verbesserte Sichtbarkeit von Elementen mit Fokus, z.B. in folgenden Fällen:

    • Hinzufügen von Zeilen zu Datenrastern, die vom Workflow-Designer und von Aktivitäts-Designern verwendet werden

    • Wechseln von Feldern mit der TAB-TASTE in den Aktivitäten ReceiveReply und SendReply

    • Festlegen von Standardwerten für Variablen oder Argumente

  • Sprachausgaben können Folgendes nun richtig erkennen:

    • Breakpoints, die im Workflow-Designer festgelegt wurden

    • Die Aktivitäten FlowSwitch<T>, FlowDecision und CorrelationScope

    • Die Inhalte der Receive-Aktivität

    • Den Zieltyp für die InvokeMethod-Aktivität

    • Das Kombinationsfeld „Ausnahme“ und den Abschnitt „Finally“ in der TryCatch-Aktivität

    • Das Kombinationsfeld „Nachrichtentyp“, den Splitter im Fenster „Korrelationsinitialisierer hinzufügen“, das Fenster „Inhaltsdefinition“ und das Definitionsfenster „CorrelatesOn“ in den Messagingaktivitäten (Receive, Send, SendReply und ReceiveReply)

    • Übertragungen von Zustandsautomaten und Übertragungsziele

    • Anmerkungen und Connectors von FlowDecision-Aktivitäten

    • Die per Rechtsklick aufrufbaren Kontextmenüs von Aktivitäten

    • Die Editors für Eigenschaftswerte, die Schaltfläche, „Suche löschen“, die Sortierschaltflächen „Nach Kategorie“ und „Alphabetisch“ sowie das Dialogfeld „Ausdrucks-Editor“ im Eigenschaftenraster

    • Den Zoomprozentwert im Workflow-Designer

    • Das Trennzeichen in den Aktivitäten Parallel und Pick

    • Die InvokeDelegate-Aktivität

    • Das Fenster „Typen auswählen“ für Wörterbuchaktivitäten (Microsoft.Activities.AddToDictionary<TKey,TValue>, Microsoft.Activities.RemoveFromDictionary<TKey,TValue> usw.)

    • Das Fenster „.NET-Typ suchen und auswählen“

    • Breadcrumbs im Workflow-Designer

  • Benutzer, die Designs mit hohem Kontrast verwenden, werden viele Verbesserungen in der Sichtbarkeit des Workflow-Designers und dessen Steuerelementen feststellen. Dazu zählen verbesserte Kontrastverhältnisse zwischen Elementen und leichter erkennbare Auswahlfelder für Fokuselemente.

Siehe auch