Udostępnij za pośrednictwem


Właściwości automatyzacji w programie Xamarin.Forms

Xamarin.Forms umożliwia ustawianie wartości ułatwień dostępu dla elementów interfejsu użytkownika przy użyciu dołączonych właściwości z klasy AutomationProperties, która z kolei ustawia natywne wartości ułatwień dostępu. W tym artykule wyjaśniono, jak używać klasy AutomationProperties, aby czytnik zawartości ekranu mógł mówić o elementach na stronie.

Xamarin.Forms umożliwia ustawianie właściwości automatyzacji na elementach interfejsu użytkownika za pośrednictwem następujących dołączonych właściwości:

  • AutomationProperties.IsInAccessibleTree — wskazuje, czy element jest dostępny dla dostępnej aplikacji. Aby uzyskać więcej informacji, zobacz AutomationProperties.IsInAccessibleTree.
  • AutomationProperties.Name — krótki opis elementu, który służy jako czytelny identyfikator elementu. Aby uzyskać więcej informacji, zobacz AutomationProperties.Name.
  • AutomationProperties.HelpText — dłuższy opis elementu, który można traktować jako tekst etykietki narzędzia skojarzony z elementem. Aby uzyskać więcej informacji, zobacz AutomationProperties.HelpText.
  • AutomationProperties.LabeledBy — umożliwia innemu elementowi definiowanie informacji o ułatwieniach dostępu dla bieżącego elementu. Aby uzyskać więcej informacji, zobacz AutomationProperties.LabeledBy.

Te dołączone właściwości ustawiają natywne wartości ułatwień dostępu, aby czytnik zawartości ekranu mógł mówić o elemecie . Aby uzyskać więcej informacji na temat dołączonych właściwości, zobacz Dołączone właściwości.

Ważne

Użycie dołączonych właściwości może mieć wpływ na wykonywanie testów interfejsu AutomationProperties użytkownika w systemie Android. Właściwości AutomationId, AutomationProperties.Name i AutomationProperties.HelpText będą ustawiać właściwość natywną ContentDescription , a AutomationProperties.Name wartości właściwości i AutomationProperties.HelpText mają pierwszeństwo przed AutomationId wartością (jeśli obie AutomationProperties.Name wartości i AutomationProperties.HelpText są ustawione, wartości zostaną łączone). Oznacza to, że wszystkie testy, których szukasz AutomationId , zakończy się niepowodzeniem, jeśli AutomationProperties.Name element lub AutomationProperties.HelpText zostaną również ustawione. W tym scenariuszu należy zmienić testy interfejsu użytkownika, aby wyszukać wartość AutomationProperties.Name lub AutomationProperties.HelpTextlub połączenie obu tych elementów.

Każda platforma ma inny czytnik zawartości ekranu do narracji wartości ułatwień dostępu:

Jednak dokładne zachowanie czytnika zawartości ekranu zależy od oprogramowania i jego konfiguracji. Na przykład większość czytników zawartości ekranu odczytuje tekst skojarzony z kontrolką po odebraniu fokusu, umożliwiając użytkownikom orientację w miarę przechodzenia między kontrolkami na stronie. Niektórzy czytniki zawartości ekranu odczytują również cały interfejs użytkownika aplikacji po wyświetleniu strony, co umożliwia użytkownikowi odbieranie całej dostępnej zawartości informacyjnej strony przed podjęciem próby nawigowania po niej.

Czytniki zawartości ekranu odczytują również różne wartości ułatwień dostępu. W przykładowej aplikacji:

  • Funkcja VoiceOver odczytuje Placeholder wartość Entryelementu , a następnie instrukcje dotyczące używania kontrolki.
  • Funkcja TalkBack odczytuje Placeholder wartość Entryelementu , a następnie AutomationProperties.HelpText wartość, a następnie instrukcje dotyczące używania kontrolki.
  • Narrator odczyta AutomationProperties.LabeledBy wartość Entryelementu , a następnie instrukcje dotyczące używania kontrolki.

Ponadto Narrator określi AutomationProperties.Namepriorytet , , AutomationProperties.LabeledBya następnie AutomationProperties.HelpText. W systemie Android talkback może łączyć AutomationProperties.Name wartości i AutomationProperties.HelpText . W związku z tym zaleca się przeprowadzenie dokładnego testowania ułatwień dostępu na każdej platformie w celu zapewnienia optymalnego środowiska.

AutomationProperties.IsInAccessibleTree

Dołączona AutomationProperties.IsInAccessibleTree właściwość to boolean element, który określa, czy element jest dostępny, a tym samym widoczny dla czytników zawartości ekranu. Musi być ustawiona tak, aby true korzystała z innych dołączonych właściwości ułatwień dostępu. Można to zrobić w języku XAML w następujący sposób:

<Entry AutomationProperties.IsInAccessibleTree="true" />

Alternatywnie można go ustawić w języku C# w następujący sposób:

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

Uwaga

Należy pamiętać, że metodę SetValue można również użyć do ustawienia dołączonej AutomationProperties.IsInAccessibleTree właściwości — entry.SetValue(AutomationProperties.IsInAccessibleTreeProperty, true);

AutomationProperties.Name

Dołączona AutomationProperties.Name wartość właściwości powinna być krótkim, opisowym ciągiem tekstowym używanym przez czytnik zawartości ekranu do ogłaszania elementu. Ta właściwość powinna być ustawiona dla elementów, które mają znaczenie ważne dla zrozumienia zawartości lub interakcji z interfejsem użytkownika. Można to zrobić w języku XAML w następujący sposób:

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

Alternatywnie można go ustawić w języku C# w następujący sposób:

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

Uwaga

Należy pamiętać, że metodę SetValue można również użyć do ustawienia dołączonej AutomationProperties.Name właściwości — activityIndicator.SetValue(AutomationProperties.NameProperty, "Progress indicator");

AutomationProperties.HelpText

Dołączona właściwość powinna być ustawiona AutomationProperties.HelpText na tekst opisujący element interfejsu użytkownika i może być uważana za tekst etykietki narzędzia skojarzony z elementem. Można to zrobić w języku XAML w następujący sposób:

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

Alternatywnie można go ustawić w języku C# w następujący sposób:

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

Uwaga

Należy pamiętać, że metodę SetValue można również użyć do ustawienia dołączonej AutomationProperties.HelpText właściwości — button.SetValue(AutomationProperties.HelpTextProperty, "Tap to toggle the activity indicator");

Na niektórych platformach w przypadku kontrolek edycji, takich jak Entry, HelpText właściwość może czasami zostać pominięta i zastąpiona tekstem zastępczym. Na przykład "Wprowadź swoją nazwę tutaj" jest dobrym kandydatem do Entry.Placeholder właściwości, która umieszcza tekst w kontrolce przed rzeczywistymi danymi wejściowymi użytkownika.

AutomationProperties.LabeledBy

Dołączona AutomationProperties.LabeledBy właściwość umożliwia innemu elementowi definiowanie informacji o ułatwieniach dostępu dla bieżącego elementu. Na przykład Label obok elementu Entry można użyć elementu , aby opisać, co Entry reprezentuje. Można to zrobić w języku XAML w następujący sposób:

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

Alternatywnie można go ustawić w języku C# w następujący sposób:

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

Ważne

Element AutomationProperties.LabeledByProperty nie jest jeszcze obsługiwany w systemie iOS.

Uwaga

Należy pamiętać, że metodę SetValue można również użyć do ustawienia dołączonej AutomationProperties.IsInAccessibleTree właściwości — entry.SetValue(AutomationProperties.LabeledByProperty, nameLabel);

Zawiłości ułatwień dostępu

W poniższych sekcjach opisano zawiłości ustawiania wartości ułatwień dostępu dla niektórych kontrolek.

W systemie Android, aby ustawić tekst odczytywany przez czytniki zawartości ekranu dla strzałki wstecz na pasku akcji w NavigationPageobiekcie , ustaw AutomationProperties.Name właściwości i AutomationProperties.HelpText na Page. Należy jednak pamiętać, że nie będzie to miało wpływu na przyciski wstecz systemu operacyjnego.

FlyoutPage

W systemach iOS i platforma uniwersalna systemu Windows (UWP), aby ustawić tekst odczytywany przez czytniki zawartości ekranu dla przycisku przełącznika na FlyoutPageobiekcie , ustaw AutomationProperties.Namewłaściwości i AutomationProperties.HelpText w FlyoutPageobiekcie lub we IconImageSource właściwości Flyout strony.

W systemie Android, aby ustawić tekst odczytywany przez czytniki zawartości ekranu dla przycisku przełącznika w obiekcie FlyoutPage, dodaj zasoby ciągów do projektu systemu Android:

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

Następnie ustaw AutomationId właściwość właściwości IconImageSource Flyout strony na odpowiedni ciąg:

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

ToolbarItem

W systemach iOS, Android i UWP czytniki zawartości ekranu będą odczytywać Text wartość ToolbarItem właściwości wystąpień, pod warunkiem, że AutomationProperties.Name wartości lub AutomationProperties.HelpText nie są zdefiniowane.

W systemach iOS i UWP AutomationProperties.Name wartość właściwości zastąpi Text wartość właściwości odczytywaną przez czytnik zawartości ekranu.

W systemie Android AutomationProperties.Name wartości właściwości i/lub AutomationProperties.HelpText całkowicie zastąpią Text wartość właściwości widoczną i odczytaną przez czytnik zawartości ekranu. Należy pamiętać, że jest to ograniczenie interfejsów API mniejsze niż 26.