Neuerungen bei der Barrierefreiheit in .NET Framework

.NET Framework zielt darauf ab, Anwendungen für Ihre Benutzer barrierefreier zu machen. Barrierefreiheitsfeatures ermöglichen es einer Anwendung, eine geeignete Benutzeroberfläche für Benutzer von Hilfstechnologien bereitzustellen. Ab .NET Framework 4.7.1 enthält .NET Framework eine große Anzahl von Verbesserungen der Barrierefreiheit, mit denen Entwickler barrierefreie Anwendungen erstellen können.

Barrierefreiheitsschalter

Sie können Ihre App so konfigurieren, dass sie sich für Barrierefreiheitsfeatures entscheidet, wenn sie auf .NET Framework 4.7 oder eine frühere Version ausgerichtet ist, aber auf .NET Framework 4.7.1 oder höher ausgeführt wird. Sie können Ihre App auch so konfigurieren, dass ältere Features verwendet werden (und nicht von Barrierefreiheitsfeatures profitieren), wenn sie auf .NET Framework 4.7.1 oder höher ausgerichtet ist. Jede .NET Framework-Version, die Barrierefreiheitsfeatures enthält, verfügt über einen versionsspezifischen Barrierefreiheitsschalter, den Sie dem <AppContextSwitchOverrides> Element im <runtime> Abschnitt der Konfigurationsdatei der Anwendung hinzufügen. Die folgenden Schalter werden unterstützt:

Version Schalter
.NET Framework 4.7.1 "Switch.UseLegacyAccessibilityFeatures"
.NET Framework 4.7.2 Switch.VerwendeVeralteteBarrierefreiheitsfunktionen.2
.NET Framework 4.8 Switch.UseLegacyAccessibilityFeatures.3
11. August 2020-KB4569746 kumulatives Update für .NET Framework 4.8 "Switch.UseLegacyAccessibilityFeatures.4"
.NET Framework 4.8.1 Switch.UseLegacyAccessibilityFeatures.5

Nutzung von Verbesserungen der Barrierefreiheit

Die neuen Barrierefreiheitsfeatures sind standardmäßig für Anwendungen aktiviert, die auf .NET Framework 4.7.1 oder höher abzielen. Darüber hinaus können Anwendungen, die auf eine frühere Version von .NET Framework abzielen, aber auf .NET Framework 4.7.1 oder höher ausgeführt werden, ältere Barrierefreiheitsverhaltensweisen deaktivieren (und dadurch die Vorteile der Barrierefreiheitsverbesserungen nutzen), indem Sie dem <AppContextSwitchOverrides> Element im <runtime> Abschnitt der Konfigurationsdatei der Anwendung Schalter hinzufügen und ihren Wert auf falsefestlegen. Der folgende Codeausschnitt zeigt, wie Sie sich für die Barrierefreiheitsverbesserungen anmelden, die in .NET Framework 4.7.1 eingeführt wurden:

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

Wenn Sie sich für Barrierefreiheitsfeatures in einer späteren .NET Framework-Version entscheiden, müssen Sie sich auch explizit für die Features aus früheren Versionen anmelden. Um Ihre App so zu konfigurieren, dass sie die Vorteile der Barrierefreiheitsverbesserungen in .NET Framework 4.7.1 und 4.7.2 nutzen kann, fügen Sie das folgende <AppContextSwitchOverrides> Element hinzu:

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

Um Ihre App so zu konfigurieren, dass sie die Vorteile von Verbesserungen der Barrierefreiheit in .NET Framework 4.7.1, 4.7.2, 4.8 und dem kumulativen Update vom August 2020 für .NET Framework 4.8 nutzen kann, fügen Sie das folgende <AppContextSwitchOverrides> Element hinzu:

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

Anwendungen, die auf .NET Framework-Versionen ab 4.7.1 abzielen, können Barrierefreiheitsfeatures deaktivieren, indem Sie dem <AppContextSwitchOverrides> Element im <runtime> Abschnitt der Konfigurationsdatei der Anwendung Schalter hinzufügen und deren Wert auf truefestlegen. Mit der folgenden Konfiguration werden beispielsweise die in .NET Framework 4.7.2 eingeführten Zugänglichkeitsfunktionen deaktiviert.

<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 Barrierefreiheitsfeatures in den folgenden Bereichen:

Windows Forms

Hinzugefügte und verbesserte UIA-Darstellungen

Vor .NET Framework 4.8.1 fehlte Windows Forms-Unterstützung für eine Reihe von UIA-Mustern, um Hilfstechnologien für die Interaktion mit Anwendungen zu unterstützen. Dieser Mangel kann dazu führen, dass die Sprachausgabe oder andere Bildschirmleseprogramme unvollständige oder falsche Informationen melden. Sie könnte sich auch auf wichtige Funktionen auswirken, z. B. das Bewegen eines Cursors durch den Text in einem TextBox Steuerelement. Mit .NET Framework 4.8.1 wurden alle erforderlichen Muster für die gemeinsamen Steuerelemente implementiert. Diese neue Funktionalität bietet Benutzern von Hilfstechnologien eine viel umfangreichere Erfahrung mit Anwendungsinteraktionen.

  • Unterstützung für das UIA-Erweitern-/Reduzieren-Muster zum DateTimePicker-Steuerelement hinzugefügt.
  • UIA-Unterstützung zum MonthCalendar Steuerelement hinzugefügt. Jetzt können Hilfstechnologietools wie die Sprachausgabe durch die einzelnen Datumsangaben im Steuerelement navigieren.
  • Implementierte Textmusterunterstützung für alle textbasierten Steuerelemente, einschließlich des TextBox-Steuerelements, des MaskedTextBox- und PropertyGrid-Bearbeitungssteuerelements, des DataGridViewTextBoxCell- und ToolStripTextBox-Steuerelements sowie der DomainUpDown-Steuerelemente.
  • ToolTip folgt nun den WCAG2.1-Richtlinien, um beständig, ausblendbar und hoverfähig auf Windows 11 zu sein. Änderungen am QuickInfo-Verhalten sind auf Windows 11-Systeme beschränkt, auf denen .NET Framework 4.8.1 installiert ist, und gelten nur für Anwendungen, für die kein Timeout für die QuickInfo festgelegt wurde. Tooltips, die weiterhin angezeigt werden, können entweder mit der ESC-Taste, mit der STRG-Taste oder durch das Navigieren zu einem Steuerelement mit einem anderen Tooltip geschlossen werden.

Verschiedene Fehlerkorrekturen für vorhandene Barrierefreiheitsfeatures

  • Die Sprachausgabe kann sich jetzt auf ein leeres DataGridView Steuerelement konzentrieren.
  • Ein Problem wurde behoben, das dazu führte, dass Bildschirmsprachausgaben die ausgeblendeten Spalten mitzählten, wenn die Spaltenanzahl in einem DataGridView-Steuerelement angekündigt wurde.
  • Es wurde ein Problem behoben, das dazu führte, dass die im DataGridviewCellStyle festgelegten Schriftarteinstellungen ignoriert wurden, wenn das zugrunde liegende Formular eine Font-Eigenschaft hatte, die sich von DefaultFont unterschied.
  • AccessibleName Die Eigenschaft der internen Bildlaufleisten des DataGridView Steuerelements wurde aktualisiert, um den Text "ScrollBar" zu entfernen.
  • Die Farbe einer DataGridViewLinkCell wurde korrigiert, wenn die Zelle markiert ist.
  • Ein Problem mit benutzerdefinierten Steuerelementen wurde behoben, bei dem keine ControlType oder LocalizedControlType für benutzerdefinierte DataGridViewCell-Elemente bereitgestellt wurden.
  • Das Leuchtdichteverhältnis wurde für ToolStripButton Steuerelemente, die auf ToolStripRenderMode festgelegt sind, auf 3,5:1 aktualisiertSystem.
  • Verbesserte Tastaturnavigation in einem ToolStrip-Element, wenn es sich um einen ToolStripComboBox-Typ handelt.
  • Die Hintergrundfarbe des ToolStripButton wurde im Modus für hohen Kontrast aktualisiert.
  • Es wurde sichergestellt, dass für die ToolStripSeparatorHilfstechnologie ein umgebendes Rechteck gemeldet wird.
  • Es wurde ein Problem behoben, durch das die Sprachausgabe JAWS beim Lesen des PropertyGrid Steuerelements abstürzte.
  • Sichergestellt, dass die UIA-Hierarchiestruktur für ein PropertyGrid-Steuerelement aktualisiert wird, wenn ein komplexer Eintrag wie Font erweitert wird. Stellen Sie außerdem sicher, dass die Baumstruktur ordnungsgemäß aktualisiert wird, wenn der Eintrag dann eingeklappt und nicht mehr sichtbar ist.
  • PropertyGrid Kategorien verfügen jetzt über einen lokalisierten Steuerelementtyp von PropertyGrid category.
  • Ein Problem mit dem ComboBox wurde behoben, das dazu führen konnte, dass die App unter "Accessibility Insights für Windows" abstürzte.
  • Die Rahmenfarbe für den Button wurde aktualisiert, um mehr Kontrast in den Standardfarben zu erzeugen.
  • Aktivierte Hilfstechnologie-Tools für den Zugriff auf die ControlBox Schaltflächen eines maximierten untergeordneten MDI-Formulars.
  • Die AccessibleName Eigenschaft eines DomainUpDown Steuerelements weist einen neuen Standardwert einer leeren Zeichenfolge auf. Die leere Zeichenfolge ermutigt Entwickler, einen aussagekräftigen Namen zu erstellen, anstatt den vorherigen nicht leeren Standardwert zu akzeptieren.
  • Die Eigenschaft der 'Drucken'-Schaltfläche in der PrintPreviewDialog wurde von "Schaltfläche Drucken" auf "Drucken" aktualisiert, um Redundanz zu vermeiden, wenn Bildschirmsprachausgaben das Steuerelement und seinen Typ ankündigen.
  • Aktualisierte UIA-Listensteuerelemente, um ein leeres Listenelement zu entfernen, wenn eine PropertyGrid Zelle vom Typ ComboBox geschlossen und nicht mehr sichtbar ist.

Windows Presentation Foundation (WPF)

Verbesserungen beim Umgang mit barrierefreien Tooltips

In dieser Version hat WPF die Benutzererfahrung verbessert, indem sichergestellt wird, dass eine QuickInfo im aktuellen Fenster mithilfe der ESC-TASTE, der STRG-TASTE (selbst) oder durch die Kombination STRG+UMSCHALT+F10 leicht geschlossen werden kann. Die Funktionalität der ESC-Taste ist in dieser Version jetzt darauf beschränkt, nur auf das aktuelle Fenster zu wirken, während sie zuvor auf alle geöffneten QuickInfos in der Anwendung zugegriffen hätte. Standardmäßig befolgen WPF-QuickInfos die WCAG2.1-Richtlinien, um dauerhaft, abbrechbar und hoverfähig zu sein.

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

Das kumulative Update für .NET Framework 4.8 vom 11. August 2020 KB4569746 enthält neue Barrierefreiheitsfeatures in Windows Forms:

  • Behebt ein Problem mit der Ankündigung von PropertyGrid Steuerelementen und dem erweiterten/reduzierten Zustand einer Kategorie durch Screenreader.

  • Aktualisiert die barrierefreien Muster des PropertyGrid Steuerelements und seiner inneren Elemente.

  • Aktualisiert die zugänglichen Namen der inneren Elemente des Steuerelements PropertyGrid, damit sie von Bildschirmsprachausgaben richtig angekündigt werden.

  • Adressierung der zugänglichen Eigenschaften des begrenzenden Rechtecks für die PropertyGridView Steuerelemente.

  • Ermöglicht Bildschirmleseprogrammen, den aufgeklappten/zugeklappten Zustand von DataGridView Kombinationsfeldzellen korrekt anzukündigen.

Neuerungen bei der Barrierefreiheit in .NET Framework 4.8

.NET Framework 4.8 enthält neue Barrierefreiheitsfeatures in den folgenden Bereichen:

Windows Forms

In .NET Framework 4.8 fügt Windows Forms Unterstützung für LiveRegions und Benachrichtigungs-Ereignisse für viele häufig verwendete Steuerelemente hinzu. Außerdem wird Unterstützung für QuickInfos hinzugefügt, wenn ein Benutzer mithilfe der Tastatur zu einem Steuerelement navigiert.

UIA LiveRegions-Unterstützung in Beschriftungen und StatusStrips

Mit UIA LiveRegions können Anwendungsentwickler Bildschirmsprachausgaben über eine Textänderung in einem Steuerelement benachrichtigen, das sich außerhalb des Arbeitsbereichs befindet, an dem der Benutzer arbeitet. Dies ist beispielsweise hilfreich für ein StatusStrip Steuerelement, das einen Verbindungsstatus anzeigt. Wenn die Verbindung unterbrochen wird und sich der Status ändert, könnte der Entwickler erwägen, die Sprachausgabe zu benachrichtigen.

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

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

…
Label1.Text = "Ready!";

Die Sprachausgabe liest "Bereit" vor, unabhängig davon, wo der Benutzer mit der Anwendung interagiert.

Sie können Ihre UserControl Region auch 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

Mit dem in Windows 10 Fall Creators Update eingeführten UIA-Benachrichtigungsereignis kann Ihre App ein UIA-Ereignis auslösen, das dazu führt, dass die Sprachausgabe einfach eine Ankündigung basierend auf dem Text vornimmt, den Sie mit dem Ereignis bereitstellen, ohne über ein entsprechendes Steuerelement in der Benutzeroberfläche verfügen zu müssen. In einigen Szenarien ist dies eine einfache Möglichkeit, die Barrierefreiheit Ihrer App erheblich zu verbessern. Es kann auch nützlich sein, über den Fortschritt eines Prozesses zu benachrichtigen, der eine lange Zeit dauern kann. Weitere Informationen zu UIA-Benachrichtigungsereignissen finden Sie unter Kann Ihre Desktop-App das neue UI-Benachrichtigungsereignis nutzen?.

Im folgenden Beispiel wird das Notification-Ereignis 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 angezeigt werden, indem der Mauszeiger in das Steuerelement bewegt wird. Ab .NET Framework 4.8 kann ein Tastaturbenutzer die QuickInfo eines Steuerelements auslösen, indem das Steuerelement mithilfe einer TAB-TASTE oder Pfeiltasten mit oder ohne Zusatztasten fokussiert wird. Für diese spezielle Verbesserung der Barrierefreiheit ist ein zusätzlicher AppContext-Switch 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 das Tooltip, wenn der Benutzer eine Schaltfläche mit der Tastatur ausgewählt hat.

Screenshot der QuickInfo, wenn der Benutzer mit der Tastatur zu einer Schaltfläche navigiert.

Windows Presentation Foundation (WPF)

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

Bildschirmlesegeräte kündigen keine Elemente mehr mit Ausblend- oder Verborgensichtbarkeit an.

Elemente mit eingeklappter oder ausgeblendeter Sichtbarkeit werden von der Sprachausgabe nicht mehr angekündigt. Benutzeroberflächen, die Elemente mit einer Sichtbarkeit von Visibility.Collapsed oder Visibility.Hidden enthalten, können von Bildschirmsprachausgaben falsch dargestellt werden, wenn sie dem Benutzer vorgelesen werden. Ab .NET Framework 4.8 enthält WPF keine zusammengeklappten oder ausgeblendeten Elemente mehr in der Kontrollansicht des UIAutomation-Baums, sodass Bildschirmsprachausgaben diese Elemente nicht mehr ankündigen können.

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

In .NET Framework 4.7.2 hat WPF die Möglichkeit hinzugefügt, TextBox und PasswordBox Textauswahl zu zeichnen, ohne die Adorner-Schicht zu verwenden. Die Vordergrundfarbe des markierten Texts in diesem Szenario wurde von SystemColors.HighlightTextBrush diktiert.

.NET Framework 4.8 fügt eine neue Eigenschaft hinzu, SelectionTextBrushmit der Entwickler den spezifischen Pinsel für den markierten Text auswählen können, wenn die nicht-Adorner-basierte Textauswahl verwendet wird. Diese Eigenschaft funktioniert nur für TextBoxBaseabgeleitete Steuerelemente und das PasswordBox Steuerelement in WPF-Anwendungen mit aktivierter nicht-Adorner-basierter Textauswahl. Es funktioniert nicht auf dem RichTextBox Steuerelement. Wenn die Nicht-Adorner-basierte Textauswahl nicht aktiviert ist, wird diese Eigenschaft ignoriert.

Um diese Eigenschaft zu verwenden, fügen Sie sie einfach ihrem XAML-Code hinzu, und verwenden Sie den entsprechenden Pinsel oder die entsprechende Bindung. Die resultierende Textauswahl sieht wie folgt aus:

Screenshot der App, die mit den ausgewählten Wörtern

Sie können die Verwendung der SelectionBrush Elemente und SelectionTextBrush Eigenschaften kombinieren, um eine beliebige Kombination aus Hintergrund- und Vordergrundfarbe zu generieren, die Sie als angemessen erahen.

Unterstützung der Eigenschaft "ControllerFor" von UIAutomation

Die UiAutomation-Eigenschaft ControllerFor gibt ein Array von Automatisierungselementen zurück, die vom Automatisierungselement bearbeitet werden, das diese Eigenschaft unterstützt. Diese Eigenschaft wird häufig für die Barrierefreiheit automatisch vorgeschlagen. ControllerFor wird verwendet, wenn sich ein Automatisierungselement auf einen oder mehrere Segmente der Anwendungs-UI oder des Desktops auswirkt. Andernfalls ist es schwierig, die Auswirkungen des Steuerelementvorgangs mit UI-Elementen zu verknüpfen. Dieses Feature bietet die Möglichkeit für Steuerelemente, einen Wert für die ControllerFor Eigenschaft bereitzustellen.

.NET Framework 4.8 fügt eine neue virtuelle Methode hinzu. GetControlledPeersCore() Um einen Wert für die ControllerFor Eigenschaft bereitzustellen, überschreiben Sie einfach diese Methode, und geben Sie eine List<AutomationPeer> für die Steuerelemente zurück, die von diesem AutomationPeerbearbeitet werden:

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 bei Tastaturfokus sowie über eine Tastenkombination angezeigt.

Um dieses Feature zu aktivieren, muss eine Anwendung .NET Framework 4.8 als Ziel verwenden oder sich durch die Verwendung von Switch.UseLegacyAccessibilityFeatures.3- und Switch.UseLegacyToolTipDisplayAppContext-Schaltern anmelden. Es folgt eine Beispielanwendungskonfigurationsdatei:

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

Nachdem sie aktiviert wurden, zeigen alle Steuerelemente, die eine QuickInfo enthalten, diese an, sobald das Steuerelement den Tastaturfokus erhält. Die Tooltipp-Anzeige kann nach einer gewissen Zeit geschlossen werden oder wenn sich der Tastaturfokus ändert. Benutzer können die QuickInfo auch manuell schließen, indem sie eine neue Tastenkombination, STRG+UMSCHALT+F10, verwenden. Nachdem die QuickInfo geschlossen wurde, kann sie mithilfe derselben Tastenkombination erneut angezeigt werden.

Hinweis

QuickInfos des Menübands für Ribbon Steuerelemente werden nicht im Tastaturfokus angezeigt. Sie werden nur über die Tastenkombination angezeigt.

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

In Windows 10 wurden zwei neue UIAutomation-Eigenschaften eingeführt, SizeOfSet und PositionInSet, die von Anwendungen verwendet werden, um die Anzahl der Elemente in einer Menge zu beschreiben. Benutzeroberflächenautomation-Clientanwendungen wie Screenreader können dann diese Eigenschaften in einer Anwendung abfragen und eine genaue Darstellung der Benutzeroberfläche der Anwendung vermitteln.

Ab .NET Framework 4.8 macht WPF diese beiden Eigenschaften für UIAutomation in WPF-Anwendungen verfügbar. Dies kann auf zwei Arten erreicht werden:

  • Mithilfe von Abhängigkeitseigenschaften.

    WPF fügt zwei neue Abhängigkeitseigenschaften hinzu, AutomationProperties.SizeOfSet und AutomationProperties.PositionInSet. Ein Entwickler kann XAML verwenden, um seine Werte festzulegen:

    <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>
    
  • Durch Außerkraftsetzung virtueller AutomationPeer-Methoden.

    Die virtuellen Methoden GetSizeOfSetCore() und GetPositionInSetCore() wurden der AutomationPeer Klasse hinzugefügt. Ein Entwickler kann Werte für SizeOfSet und PositionInSet durch Außerkraftsetzung dieser Methoden 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 einen Wert für diese Eigenschaften automatisch ohne zusätzliche Aktion des Entwicklers bereit. Wenn eine ItemsControl Gruppe gruppiert ist, wird die Sammlung von Gruppen als Gruppe dargestellt, und jede Gruppe wird als separate Gruppe gezählt, wobei jedes Element innerhalb dieser Gruppe seine Position innerhalb dieser Gruppe sowie die Größe der Gruppe bereitstellt. Automatische Werte sind von der Virtualisierung nicht betroffen. Selbst wenn ein Element nicht verwirklicht wird, zählt es weiterhin zur Gesamtgröße der Menge und beeinflusst die Position seiner gleichgeordneten Elemente innerhalb der Menge.

Automatische Werte werden nur bereitgestellt, wenn die Anwendung auf .NET Framework 4.8 ausgerichtet ist. Für Anwendungen, die auf eine frühere Version von .NET Framework abzielen, können Sie den Switch.UseLegacyAccessibilityFeatures.3AppContext-Switch festlegen, 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 für Windows Workflow Foundation (WF)

Der Workflow-Designer enthält die folgenden Änderungen in .NET Framework 4.8:

  • Benutzer, die die Sprachausgabe verwenden, sehen Verbesserungen in FlowSwitch-Fallbezeichnungen.

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

  • Benutzer, die Designs mit hohem Kontrast auswählen, sehen Verbesserungen der Sichtbarkeit des Workflow-Designers und der zugehörigen Steuerelemente, z. B. bessere Kontrastverhältnisse zwischen Elementen und deutlicheren Auswahlfeldern, die für Fokuselemente verwendet werden.

Wenn Ihre Anwendung auf .NET Framework 4.7.2 oder eine frühere Version ausgerichtet ist, können Sie sich für diese Änderungen anmelden, indem Sie den Switch.UseLegacyAccessibilityFeatures.3AppContext-Switchfalse in Ihrer Anwendungskonfigurationsdatei festlegen. Weitere Informationen finden Sie im Abschnitt "Nutzen von Verbesserungen bei der Barrierefreiheit " in diesem Artikel.

Neuerungen bei der Barrierefreiheit in .NET Framework 4.7.2

.NET Framework 4.7.2 enthält neue Barrierefreiheitsfeatures in den folgenden Bereichen:

Windows Forms

Vom Betriebssystem definierte Farben in Designs mit hohem Kontrast

Ab .NET Framework 4.7.2 verwendet Windows Forms Farben, die vom Betriebssystem in Designs mit hohem Kontrast definiert sind. Dies wirkt sich auf die folgenden Steuerelemente aus:

Erzähler-Verbesserungen

Ab .NET Framework 4.7.2 wird die Unterstützung des Narrators wie folgt verbessert:

  • Es gibt den Wert der ToolStripMenuItem.ShortcutKeys-Eigenschaft bekannt, wenn der Text eines ToolStripMenuItem angekündigt wird.

  • Es gibt an, wann ein ToolStripMenuItemEnabled-Eigenschaft auf false gesetzt ist.

  • Es gibt Feedback zum Status eines Kontrollkästchens, wenn ListView.CheckBoxes auf true gesetzt ist.

  • Die Fokusreihenfolge des Scanmodus der Sprachausgabe ist mit der visuellen Reihenfolge der Steuerelemente im ClickOnce-Downloaddialogfenster konsistent.

Verbesserungen bei DataGridView

Ab .NET Framework 4.7.2 hat das DataGridView Steuerelement die folgenden Verbesserungen der Barrierefreiheit eingeführt:

Verbesserte visuelle Hinweise

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

Verbesserte Unterstützung des Eigenschaftenrasters

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

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

Verbesserte Tastaturnavigation

  • Das ToolStripButton-Steuerelement erlaubt es, den Fokus zu setzen, wenn es in einem ToolStripPanel-Element enthalten ist, bei dem die TabStop-Eigenschaft auf true festgelegt ist.

Windows Presentation Foundation (WPF)

Änderungen an den Steuerelementen CheckBox und RadioButton

In .NET Framework 4.7.1 und früheren Versionen haben WPF System.Windows.Controls.CheckBox und System.Windows.Controls.RadioButton Steuerelemente inkonsistente und, in klassischen Themen und Hochkontrast-Themen, falsche Fokusanzeigen. Diese Probleme treten in Fällen auf, in denen die Steuerelemente keinen Inhaltssatz haben. Dies kann dazu führen, dass der Übergang zwischen Themen verwirrend ist und es schwer ist, den visuellen Fokus zu erkennen.

In .NET Framework 4.7.2 sind diese visuellen Elemente jetzt über verschiedene Designs hinweg konsistenter und in den Designs "Klassisch" und "Hoher Kontrast" leichter sichtbar.

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

Bei WinForms-Steuerelementen, die in einer WPF-Anwendung im .NET Framework 4.7.1 und früheren Versionen gehostet werden, konnten Benutzer nicht mit der Tabulatortaste aus der WinForms-Ebene wechseln, wenn das erste oder letzte Steuerelement in dieser Ebene das WPF-Steuerelement ElementHost war. In .NET Framework 4.7.2 können Benutzer jetzt aus der WinForms-Schicht heraus tabben.

Automatisierte Anwendungen, die sich darauf verlassen, dass der Fokus nie die WinForms-Schicht verlässt, funktionieren möglicherweise nicht mehr wie erwartet.

Neuerungen bei der Barrierefreiheit in .NET Framework 4.7.1

.NET Framework 4.7.1 enthält neue Barrierefreiheitsfeatures in den folgenden Bereichen:

Windows Presentation Foundation (WPF)

Verbesserungen der Sprachausgabe

Wenn Barrierefreiheitsverbesserungen aktiviert werden, enthält .NET Framework 4.7.1 die folgenden Verbesserungen, die sich auf Screenreader auswirken:

  • In .NET Framework 4.7 und früheren Versionen wurden Expander Steuerelemente von Bildschirmleseprogrammen als Schaltflächen vorgelesen. Ab .NET Framework 4.7.1 werden sie ordnungsgemäß als solche aufklappbare/einklappbare Gruppen angekündigt.

  • In .NET Framework 4.7 und früheren Versionen wurden DataGridCell Steuerelemente von Bildschirmsprachausgaben als "benutzerdefiniert" angekündigt. Ab .NET Framework 4.7.1 werden sie nun korrekt als Datenrasterzelle (lokalisiert) angekündigt.

  • Ab .NET Framework 4.7.1 geben Bildschirmsprachausgaben den Namen eines bearbeitbaren ComboBoxElements an.

  • In .NET Framework 4.7 und früheren Versionen wurden Steuerelemente PasswordBox als „kein Element in der Ansicht“ angekündigt oder zeigten anderweitig ein falsches Verhalten. Dieses Problem wurde behoben, beginnend mit .NET Framework 4.7.1.

UIAutomation LiveRegion-Unterstützung

Screenreader wie Narrator helfen Personen beim Lesen der Benutzeroberflächeninhalte einer Anwendung, indem sie in der Regel den fokussierten Inhalt per Text-zu-Sprache ausgeben. Wenn sich jedoch ein UI-Element ändert und den Fokus nicht hat, wird der Benutzer möglicherweise nicht benachrichtigt und verpasst wichtige Informationen. Liveregionen zielen darauf ab, dieses Problem zu lösen. Ein Entwickler kann sie verwenden, um die Sprachausgabe oder einen anderen UIAutomation-Client darüber zu informieren, dass an einem UI-Element eine wichtige Änderung vorgenommen wurde. Die Sprachausgabe kann dann entscheiden, wie und wann der Benutzer über diese Änderung informiert werden soll.

Um Liveregionen zu unterstützen, wurden die folgenden APIs zu WPF hinzugefügt:

Sie können eine LiveRegion erstellen, indem Sie die AutomationProperties.LiveSetting-Eigenschaft auf das element von Interesse festlegen, wie im folgenden Beispiel gezeigt:

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

Wenn sich die Daten in der Live-Region ändern und Sie einen Screenreader benachrichtigen müssen, lösen Sie ein Ereignis explizit aus, wie im folgenden Beispiel gezeigt.

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 im hohen Kontrast zu verschiedenen WPF-Steuerelementen vorgenommen. Sie sind sichtbar, wenn das HighContrast Thema jetzt festgelegt ist. Dazu gehören:

  • Expander-Steuerelement

    Das Fokusvisual für das Expander Steuerelement ist jetzt sichtbar. Die visuellen Tastaturelemente für ComboBox, ListBox und RadioButton Steuerelemente sind ebenfalls sichtbar. Beispiel:

    Before:

    Screenshot des Erweiterungssteuerelements mit Fokus und ohne Fokusanzeige.

    Danach:

    Screenshot des Erweiterungssteuerelements mit Fokus mit einer gepunkteten Linie um den Text des Steuerelements.

  • CheckBox und RadioButton Steuerelemente

    Der Text in den Steuerelementen CheckBox und RadioButton ist jetzt einfacher zu erkennen, wenn er in kontrastreichen Designs ausgewählt wird. Beispiel:

    Before:

    Screenshot von Optionsfeldern und Kontrollkästchen mit schlechter Textsichtbarkeit bei hohen Kontrastthemen.

    Danach:

    Screenshot von Options- und Auswahlfeldern mit besserer Textsichtbarkeit für Designs mit hohem Kontrast.

  • ComboBox-Steuerelement

    Ab .NET Framework 4.7.1 ist der Rahmen eines deaktivierten ComboBox Steuerelements dieselbe Farbe wie deaktivierter Text. Beispiel:

    Before:

    Screenshot eines deaktivierten ComboBox-Steuerelements mit Rahmen und Steuerelementtext in unterschiedlichen Farben.

    Danach:

    Screenshot eines deaktivierten ComboBox-Steuerelements mit einem Rahmen, der die gleiche Farbe wie der Steuerelementtext hat.

    Darüber hinaus verwenden deaktivierte und fokussierte Schaltflächen die richtige Designfarbe.

    Before:

    Screenshot einer schwarzen Schaltfläche mit grauem Text, der

    Danach:

    Screenshot einer blauen Schaltfläche mit schwarzem Text, der

    Schließlich wurde in .NET Framework 4.7 und früheren Versionen das Festlegen des Stils ComboBox eines Toolbar.ComboBoxStyleKey Steuerelements dazu geführt, dass der Dropdownpfeil unsichtbar ist. Dieses Problem wurde behoben, beginnend mit .NET Framework 4.7.1. Beispiel:

    Before:

    Screenshot eines ComboBox-Steuerelements mit einem unsichtbaren Dropdownpfeil.

    Danach:

    Screenshot eines ComBoxBox-Steuerelements, das den Dropdownpfeil anzeigt.

  • DataGrid-Steuerelement

    Ab .NET Framework 4.7.1 verwendet der Sortierindikatorpfeil in DataGrid Steuerelementen jetzt die richtigen Designfarben. Beispiel:

    Before:

    Screenshot des Pfeils zur Sortieranzeige vor Verbesserungen.

    Danach:

    Screenshot des Pfeils zur Sortieranzeige nach Verbesserungen.

    Darüber hinaus änderte sich in .NET Framework 4.7 und früheren Versionen der standardmäßige Linkstil beim Überfahren mit der Maus in Modi mit hohem Kontrast zu einer falschen Farbe. Dies wird ab .NET Framework 4.7.1 aufgelöst. DataGrid Ebenso verwenden Kontrollkästchenspalten die erwarteten Farben für Tastaturfokusfeedback ab .NET Framework 4.7.1.

    Before:

    Screenshot eines Links mit dem Text

    Danach:

    Screenshot eines Links, auf dem

Weitere Informationen zu Verbesserungen bei der Barrierefreiheit von WPF in .NET Framework 4.7.1 finden Sie unter Verbesserungen der Barrierefreiheit in WPF.

Verbesserungen bei der Barrierefreiheit von Windows Forms

In .NET Framework 4.7.1 umfasst Windows Forms (WinForms) Barrierefreiheitsänderungen in den folgenden Bereichen.

Verbesserte Anzeige im Modus "Hoher Kontrast"

Ab .NET Framework 4.7.1 bieten verschiedene WinForms-Steuerelemente ein verbessertes Rendering in den HighContrast-Modi, die im Betriebssystem verfügbar sind. Windows 10 hat die Werte für einige Systemfarben mit hohem Kontrast geändert, und Windows Forms basiert auf dem Windows 10 Win32-Framework. Für die beste Erfahrung führen Sie die neueste Version von Windows aus und aktivieren Sie die neuesten Betriebssystemänderungen, indem Sie eine App.manifest-Datei in einer Testanwendung hinzufügen und die unterstützte Windows 10-Betriebssystemzeile auskommentieren, sodass sie wie folgt aussieht:

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

Einige Beispiele für Änderungen mit hohem Kontrast sind:

  • Häkchen in MenuStrip Elementen können einfacher angezeigt werden.

  • Wenn diese Option ausgewählt ist, sind deaktivierte MenuStrip Elemente einfacher anzuzeigen.

  • Text in einem ausgewählten Button Steuerelement kontrastiert mit der Auswahlfarbe.

  • Deaktivierter Text ist einfacher zu lesen. Beispiel:

    Before:

    Screenshot einer App, die verschiedene Steuerelemente verwendet, die im Modus mit hohem Kontrast ausgeführt werden, bevor verbesserungen an der Barrierefreiheit vorgenommen werden.

    Danach:

    Screenshot einer App, die nach Verbesserungen der Barrierefreiheit verschiedene Steuerelemente verwendet, die im Modus mit hohem Kontrast ausgeführt werden.

  • Verbesserungen beim hohen Kontrast im Thread-Ausnahmedialogfeld.

Verbesserte Unterstützung für den Narrator

Windows Forms in .NET Framework 4.7.1 enthält die folgenden Verbesserungen der Barrierefreiheit für den Narrator:

  • Auf das MonthCalendar Steuerelement kann vom Narrator sowie von anderen Benutzeroberflächenautomatisierungstools zugegriffen werden.

  • Das CheckedListBox Steuerelement benachrichtigt den Narrator, wenn sich der Überprüfungsstatus eines Elements geändert hat, sodass der Benutzer benachrichtigt wird, dass er den Wert eines Listenelements geändert hat.

  • Das DataGridViewCell Steuerelement meldet den korrekten schreibgeschützten Status an den Narrator.

  • Der Narrator kann jetzt deaktivierten ToolStripMenuItem Text lesen, während er zuvor deaktivierte Menüelemente übersprungen hätte.

Erweiterte Unterstützung für UIAutomation-Barrierefreiheitsmuster

Ab .NET Framework 4.7.1 können Entwickler von Barrierefreiheitstechnologietools allgemeine API-Barrierefreiheitsmuster und -eigenschaften für mehrere WinForms-Steuerelemente nutzen. Zu diesen Verbesserungen bei der Barrierefreiheit gehören:

Verbesserte Erfahrung mit dem Eigenschaftenbrowser

Ab .NET Framework 4.7.1 umfasst Windows Forms:

  • Bessere Tastaturnavigation durch die verschiedenen Dropdownauswahlfenster.
  • Eine Reduzierung unnötiger Tabstopps.
  • Bessere Berichterstellung von Steuerelementtypen.
  • Verbessertes Sprachausgabeverhalten.

ASP.NET Websteuerelemente

Ab .NET Framework 4.7.1 und Visual Studio 2017, Version 15.3, verbessert ASP.NET, wie ASP.NET Websteuerelemente mit der Barrierefreiheitstechnologie in Visual Studio funktionieren. Zu den Änderungen gehören:

  • Änderungen, um fehlende Barrierefreiheitsmuster der Benutzeroberfläche in Steuerelementen zu implementieren, z. B. das Dialogfeld " Feld hinzufügen " im Assistenten " Detailansicht " oder das Dialogfeld "ListView konfigurieren " des ListView-Assistenten .

  • Änderungen zur Verbesserung der Anzeige im Modus "Hoher Kontrast", z. B. im Editor für Datenseitenseitenfelder.

  • Änderungen zur Verbesserung der Tastaturnavigation für Steuerelemente, wie das Dialogfeld Felder im Assistenten Felder bearbeiten des DataPager-Steuerelements, das Dialogfeld Objektkontext konfigurieren oder das Dialogfeld Datenauswahl konfigurieren im Assistenten zum Konfigurieren der Datenquelle.

.NET SDK-Tools

Das Konfigurations-Editor-Tool (SvcConfigEditor.exe) und das Dienstablaufverfolgungs-Viewer-Tool (SvcTraceViewer.exe) wurden verbessert, indem verschiedene Barrierefreiheitsprobleme behoben wurden. Die meisten dieser Probleme waren kleine Probleme, z. B. ein Name, der nicht definiert wird oder bestimmte Benutzeroberflächenautomatisierungsmuster nicht ordnungsgemäß implementiert werden. Obwohl viele Benutzer diese falschen Werte nicht kennen, finden Kunden, die Hilfstechnologien wie Bildschirmsprachausgaben verwenden, diese SDK-Tools barrierefreier.

Diese Verbesserungen ändern einige frühere Verhaltensweisen, z. B. die Tastaturfokusreihenfolge.

Workflow-Designer für Windows Workflow Foundation (WF)

Barrierefreiheitsänderungen im Workflow-Designer umfassen Folgendes:

  • Die Tabulatorreihenfolge wechselt bei einigen Steuerelementen von links nach rechts und von oben nach unten.

  • Weitere Funktionen stehen über die Tastatur zur Verfügung:

    • Wenn Sie die Eigenschaften einer Aktivität bearbeiten, können Eigenschaftengruppen beim ersten Fokussieren über die Tastatur minimiert werden.

    • Auf Warnungssymbole kann über die Tastatur zugegriffen werden.

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

    • Tastaturbenutzer können auf die Kopfzeilenelemente im Bereich "Argumente " und "Variablen " des Workflow-Designers zugreifen.

  • Verbesserte Sichtbarkeit von Elementen mit Fokus, z. B. wenn:

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

    • Durchlaufen von Feldern in ReceiveReply und SendReply Aktivitäten

    • Festlegen von Standardwerten für Variablen oder Argumente

  • Bildschirmsprachausgaben können jetzt die folgenden Elemente richtig erkennen:

    • Haltepunkte, die im Workflow-Designer festgelegt sind.

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

    • Der Inhalt der Receive Aktivität.

    • Der Zieltyp für die InvokeMethod Aktivität.

    • Das Kombinationsfeld „Ausnahme“ und der Abschnitt „Schließlich“ in der TryCatch-Aktivität.

    • Das Kombinationsfeld "Nachrichtentyp", der Splitter im Fenster "Korrelationsinitialisierer hinzufügen", das Fenster "Inhaltsdefinition" und das Fenster "CorrelatesOn-Definition" in den Messagingaktivitäten (Receive, Send, SendReply, und ReceiveReply).

    • Zustandsmaschinenübergänge und Übergangsziele.

    • Verbindungen und Anmerkungen zu FlowDecision-Aktivitäten.

    • Die Kontextmenüs für Aktivitäten (mit der rechten Maustaste klicken).

    • Die Eigenschaftenwert-Editoren, die Schaltfläche "Suche löschen", die Schaltflächen "Nach Kategorie" und "Alphabetische Sortierung" und das Dialogfeld "Ausdrucks-Editor" im Eigenschaftenraster.

    • Der Zoomprozentsatz im Workflow-Designer.

    • Das Trennzeichen in Parallel und Pick Aktivitäten

    • 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 "Durchsuchen" und ".NET-Typ auswählen".

    • Breadcrumbs im Workflow-Designer.

  • Benutzer, die Designs mit hohem Kontrast auswählen, sehen viele Verbesserungen bei der Sichtbarkeit des Workflow-Designers und der zugehörigen Steuerelemente, z. B. bessere Kontrastverhältnisse zwischen Elementen und deutlicheren Auswahlfeldern, die für Fokuselemente verwendet werden.

Siehe auch