Teilen über


Automatisierungseigenschaften in Xamarin.Forms

Xamarin.Forms ermöglicht das Festlegen von Barrierefreiheitswerten für Benutzeroberflächenelemente. Dazu werden angefügte Eigenschaften der AutomationProperties-Klasse verwendet, die wiederum native Barrierefreiheitswerte festlegen. In diesem Artikel wird erläutert, wie Sie die AutomationProperties-Klasse verwenden, sodass eine Sprachausgabe über die Elemente auf der Seite sprechen kann.

Xamarin.Forms ermöglicht das Festlegen von Automatisierungseigenschaften auf Benutzeroberflächenelemente über die folgenden angefügten Eigenschaften:

  • AutomationProperties.IsInAccessibleTree gibt an, ob das Element für eine barrierefreie Anwendung verfügbar ist. Weitere Informationen finden Sie unter AutomationProperties.IsInAccessibleTree.
  • AutomationProperties.Name ist eine kurze Beschreibung des Elements, das als aussprechbarer Bezeichner für das Element dient. Weitere Informationen finden Sie unter AutomationProperties.Name.
  • AutomationProperties.HelpText ist eine längere Beschreibung des Elements, das als dem Element zugeordneter QuickInfo-Text verstanden werden kann. Weitere Informationen finden Sie unter AutomationProperties.HelpText.
  • AutomationProperties.LabeledBy ermöglicht es einem anderen Element, Informationen zur Barrierefreiheit für das aktuelle Element zu definieren. Weitere Informationen finden Sie unter AutomationProperties.LabeledBy.

Diese angefügten Eigenschaften legen native Barrierefreiheitswerte so fest, dass eine Sprachausgabe über das Element sprechen kann. Weitere Informationen zu angefügten Eigenschaften finden Sie unter Angefügte Eigenschaften.

Wichtig

Die Verwendung der angefügten AutomationProperties-Eigenschaften kann die Ausführung des UI-Tests unter Android beeinträchtigen. Die Eigenschaften AutomationId, AutomationProperties.Name und AutomationProperties.HelpText legen die native ContentDescription-Eigenschaft fest, wobei die Eigenschaftswerte AutomationProperties.Name und AutomationProperties.HelpText Vorrang vor dem AutomationId-Wert haben (wenn AutomationProperties.Name und AutomationProperties.HelpText festgelegt wurden, werden die Werte verkettet). Dies bedeutet, dass alle Tests, die nach AutomationId suchen, fehlschlagen, wenn AutomationProperties.Name oder AutomationProperties.HelpText auch auf das Element festgelegt werden. In diesem Szenario sollten UI-Tests so geändert werden, dass sie nach dem Wert von AutomationProperties.Name oder AutomationProperties.HelpText oder einer Verkettung der beiden suchen.

Jede Plattform verfügt über eine andere Sprachausgabe, die die Barrierefreiheitswerte versprachlicht:

Das genaue Verhalten einer Sprachausgabe hängt jedoch von der Software und deren Konfiguration durch den Benutzer ab. Die meisten Sprachausgaben lesen zum Beispiel den einem Steuerelement zugeordneten Text, wenn dieses fokussiert wird. So können sich Benutzer orientieren, wenn sie zwischen den Steuerelementen auf der Seite wechseln. Einige Sprachausgaben lesen auch die komplette Benutzeroberfläche der Anwendung, wenn eine Seite angezeigt wird. Dadurch kann der Benutzer alle auf der Seite verfügbaren Informationsinhalte erhalten, bevor er darin navigiert.

Sprachausgaben lesen auch unterschiedliche Barrierefreiheitswerte vor. In der Beispielanwendung:

  • VoiceOver liest den Placeholder-Wert von Entry und dann die Anweisungen für die Verwendung des Steuerelements.
  • TalkBack liest den Placeholder-Wert von Entry, dann den AutomationProperties.HelpText-Wert und dann die Anweisungen für die Verwendung des Steuerelements.
  • Narrator liest den AutomationProperties.LabeledBy-Wert von Entry und dann die Anweisungen für die Verwendung des Steuerelements.

Darüber hinaus priorisiert Narrator AutomationProperties.Name, AutomationProperties.LabeledBy und dann AutomationProperties.HelpText. Unter Android kombiniert TalkBack möglicherweise die Werte AutomationProperties.Name und AutomationProperties.HelpText. Deshalb empfiehlt es sich, die Barrierefreiheit auf jeder Plattform umfassend zu testen, um eine optimale Funktionsweise sicherzustellen.

AutomationProperties.IsInAccessibleTree

Die angefügte Eigenschaft AutomationProperties.IsInAccessibleTree ist ein boolean-Wert, der festlegt, ob das Element barrierefrei und somit für Sprachausgaben sichtbar ist. Der Wert muss auf true festgelegt werden, damit die anderen angefügten Eigenschaften der Barrierefreiheit verwendet werden. Dies kann in XAML folgendermaßen erfüllt werden:

<Entry AutomationProperties.IsInAccessibleTree="true" />

Alternativ kann es in C# folgendermaßen festgelegt werden:

var entry = new Entry();
AutomationProperties.SetIsInAccessibleTree(entry, true);

Hinweis

Beachten Sie, dass auch die SetValue-Methode verwendet werden kann, um die angefügte Eigenschaft AutomationProperties.IsInAccessibleTree festzulegen – entry.SetValue(AutomationProperties.IsInAccessibleTreeProperty, true);.

AutomationProperties.Name

Der Wert der angefügten Eigenschaft AutomationProperties.Name sollte eine kurze beschreibende Textzeichenfolge sein, mit der eine Sprachausgabe ein Element ankündigen kann. Diese Eigenschaft sollte für Elemente festgelegt werden, deren Bedeutung wichtig für das Verstehen des Inhalts oder die Interaktion mit der Benutzeroberfläche ist. Dies kann in XAML folgendermaßen erfüllt werden:

<ActivityIndicator AutomationProperties.IsInAccessibleTree="true"
                   AutomationProperties.Name="Progress indicator" />

Alternativ kann es in C# folgendermaßen festgelegt werden:

var activityIndicator = new ActivityIndicator();
AutomationProperties.SetIsInAccessibleTree(activityIndicator, true);
AutomationProperties.SetName(activityIndicator, "Progress indicator");

Hinweis

Beachten Sie, dass auch die SetValue-Methode verwendet werden kann, um die angefügte Eigenschaft AutomationProperties.Name festzulegen – activityIndicator.SetValue(AutomationProperties.NameProperty, "Progress indicator");.

AutomationProperties.HelpText

Die angefügte Eigenschaft AutomationProperties.HelpText sollte auf Text festgelegt werden, der das Benutzeroberflächenelement beschreibt, und kann als QuickInfo-Text verstanden werden, der dem Element zugeordnet ist. Dies kann in XAML folgendermaßen erfüllt werden:

<Button Text="Toggle ActivityIndicator"
        AutomationProperties.IsInAccessibleTree="true"
        AutomationProperties.HelpText="Tap to toggle the activity indicator" />

Alternativ kann es in C# folgendermaßen festgelegt werden:

var button = new Button { Text = "Toggle ActivityIndicator" };
AutomationProperties.SetIsInAccessibleTree(button, true);
AutomationProperties.SetHelpText(button, "Tap to toggle the activity indicator");

Hinweis

Beachten Sie, dass auch die SetValue-Methode verwendet werden kann, um die angefügte Eigenschaft AutomationProperties.HelpText festzulegen – button.SetValue(AutomationProperties.HelpTextProperty, "Tap to toggle the activity indicator");.

Auf manchen Plattformen kann für Bearbeitungssteuerelemente wie Entry die HelpText-Eigenschaft in einigen Fällen weggelassen und durch Platzhaltertext ersetzt werden. Zum Beispiel ist „Geben Sie hier Ihren Namen ein“ eine gute Variante für die Entry.Placeholder-Eigenschaft, die vor der tatsächlichen Eingabe durch den Benutzer den Text in das Steuerelement platziert.

AutomationProperties.LabeledBy

Die angefügte Eigenschaft AutomationProperties.LabeledBy ermöglicht es einem anderen Element, Informationen zur Barrierefreiheit für das aktuelle Element zu definieren. Zum Beispiel kann eine Label-Klasse neben einer Entry-Klasse verwendet werden, um zu beschreiben, wofür die Entry-Klasse steht. Dies kann in XAML folgendermaßen erfüllt werden:

<Label x:Name="label" Text="Enter your name: " />
<Entry AutomationProperties.IsInAccessibleTree="true"
       AutomationProperties.LabeledBy="{x:Reference label}" />

Alternativ kann es in C# folgendermaßen festgelegt werden:

var nameLabel = new Label { Text = "Enter your name: " };
var entry = new Entry();
AutomationProperties.SetIsInAccessibleTree(entry, true);
AutomationProperties.SetLabeledBy(entry, nameLabel);

Wichtig

AutomationProperties.LabeledByProperty wird noch nicht unter iOS unterstützt.

Hinweis

Beachten Sie, dass auch die SetValue-Methode verwendet werden kann, um die angefügte Eigenschaft AutomationProperties.IsInAccessibleTree festzulegen – entry.SetValue(AutomationProperties.LabeledByProperty, nameLabel);.

Schwierigkeiten beim Zugriff

In den folgenden Abschnitten werden die Schwierigkeiten beim Festlegen von Zugriffswerten auf bestimmten Steuerelementen beschrieben.

Legen Sie unter Android die Eigenschaften AutomationProperties.Name und AutomationProperties.HelpText auf eine Page-Klasse fest, um den Text festzulegen, der von Sprachausgaben für den „Zurück“-Pfeil in der Aktionsleiste in einer NavigationPage-Klasse gelesen werden kann. Beachten Sie jedoch, dass dies keine Auswirkungen auf die „Zurück“-Pfeile im Betriebssystem hat.

FlyoutPage

Legen Sie unter iOS und auf der Universellen Windows-Plattform (UWP) entweder die Eigenschaften AutomationProperties.Name und AutomationProperties.HelpText auf die FlyoutPage-Klasse oder auf die Eigenschaft IconImageSource der Flyout-Seite fest, um den Text festzulegen, der von Sprachausgaben für die Umschaltfläche auf einer FlyoutPage-Klasse gelesen werden kann.

Fügen Sie unter Android dem Android-Projekt Zeichenfolgenressourcen hinzu, um den Text festzulegen, der von Sprachausgaben für die Umschaltfläche auf einer FlyoutPage gelesen werden kann:

<resources>
    <string name="app_name">Xamarin Forms Control Gallery</string>
    <string name="btnMDPAutomationID_open">Open Side Menu message</string>
    <string name="btnMDPAutomationID_close">Close Side Menu message</string>
</resources>

Legen Sie anschließend die Eigenschaft AutomationId auf die Eigenschaft IconImageSource der Flyout-Seite für die entsprechende Zeichenfolge fest:

var flyout = new ContentPage { ... };
flyout.IconImageSource.AutomationId = "btnMDPAutomationID";

ToolbarItem

Unter iOS, Android und UWP lesen Sprachausgaben den Text-Eigenschaftswert von ToolbarItem-Instanzen, sofern die Werte AutomationProperties.Name und AutomationProperties.HelpText nicht definiert sind.

Unter iOS und UWP ersetzt der Eigenschaftswert AutomationProperties.Name den Eigenschaftswert Text, der von der Sprachausgabe gelesen wird.

Unter Android ersetzt der Eigenschaftswert AutomationProperties.Name und/oder AutomationProperties.HelpText den Eigenschaftswert Text vollständig. Dieser ist sichtbar und kann von der Sprachausgabe gelesen werden. Beachten Sie, dass es eine Einschränkung auf weniger als 26 APIs gibt.