Поделиться через


Предоставить основные сведения о доступности

Основные сведения о специальных возможностях часто классифицируются по имени, роли и значению. В этом разделе описывается код, помогающий приложению предоставлять основные сведения, необходимые вспомогательным технологиям.

Доступное имя

Доступное имя — это короткая описательная текстовая строка, которую средство чтения с экрана использует для объявления элемента пользовательского интерфейса. Задайте доступное имя для элементов пользовательского интерфейса, чтобы иметь значение, важное для понимания содержимого или взаимодействия с пользовательским интерфейсом. Такие элементы обычно включают изображения, поля ввода, кнопки, элементы управления и регионы.

В этой таблице описывается, как определить или получить доступное имя для различных типов элементов в пользовательском интерфейсе XAML.

Тип элемента Описание
Статический текст Для элементов TextBlock и RichTextBlock доступное имя автоматически определяется из видимого (внутреннего) текста. Весь текст в этом элементе используется в качестве имени. См. название из внутреннего текста.
Изображения Элемент изображения XAML не имеет прямого аналога атрибута HTML alt img и аналогичных элементов. Используйте AutomationProperties.Name для указания имени или воспользуйтесь методом создания подписей. См. доступные имена для изображений.
Элементы формы Доступное имя элемента формы должно совпадать с меткой, отображаемой для этого элемента. См. метки иLabeledBy.
Кнопки и ссылки По умолчанию доступное имя кнопки или ссылки основано на видимом тексте, используя те же правила, что и в разделе "Имя" из внутреннего текста. В случаях, когда кнопка содержит только изображение, используйте AutomationProperties.Name для предоставления текстового эквивалента предполагаемого действия кнопки.

Большинство контейнерных элементов, таких как панели, не представляют своё содержимое в качестве доступного имени. Это связано с тем, что это содержимое элемента, которое должно сообщать имя и соответствующую роль, а не его контейнер. Элемент контейнера может сообщить о том, что это элемент с дочерними элементами в представлении службы автоматизации пользовательского интерфейса Майкрософт, таким образом, логика вспомогательных технологий может пройти по нему. Но пользователям вспомогательных технологий обычно не нужно знать о контейнерах, поэтому большинство контейнеров не называются.

Роль и значение

Элементы управления и другие элементы пользовательского интерфейса, входящие в словарь XAML, реализуют поддержку автоматизации пользовательского интерфейса для отображения роли и значения в рамках их определений. Средства автоматизации пользовательского интерфейса можно использовать для изучения сведений о роли и значении для элементов управления или ознакомиться с документацией по реализации AutomationPeer каждого элемента управления. Доступные роли в платформе автоматизации пользовательского интерфейса определяются в перечислении AutomationControlType . Клиенты автоматизации пользовательского интерфейса, например, вспомогательные технологии, могут получать сведения о роли, вызывая методы, которые предоставляет платформа автоматизации пользовательского интерфейса с помощью AutomationPeerэлемента управления.

Не все элементы управления имеют значение. Элементы управления, которые имеют значение, сообщают эту информацию в систему автоматизации пользовательского интерфейса через партнёров и шаблоны, поддерживаемые этим элементом управления. Например, элемент формы TextBox действительно имеет значение. Вспомогательные технологии могут быть клиентом UI Automation и могут распознать, что существует значение и каково оно. В этом конкретном случае TextBox поддерживает шаблон IValueProvider с помощью определений TextBoxAutomationPeer.

Замечание

В случаях, когда вы используете AutomationProperties.Name или другие методы, чтобы явно указать доступное имя, не включайте тот же текст, который используется для определения роли или типа элемента управления, в доступном имени. Например, не включать строки, такие как "button" или "list" в имя. Сведения о роли и типе поступают из другого свойства автоматизации пользовательского интерфейса (LocalizedControlType), предоставляемого поддержкой элемента управления по умолчанию для автоматизации пользовательского интерфейса. Многие вспомогательные технологии добавляют LocalizedControlType к доступному имени, поэтому дублирование роли в доступном имени может привести к ненужным повторяющимся словам. Например, если вы даете управляющим элементам Button доступное имя "button" или включите "button" в конец имени, это может быть прочитано средствами чтения с экрана как "кнопка кнопка". Этот аспект информации о специальных возможностях следует проверить с помощью экранного диктора.

Влияние на представления дерева автоматизации пользовательского интерфейса

Платформа автоматизации пользовательского интерфейса имеет концепцию представлений дерева, где клиенты службы автоматизации пользовательского интерфейса могут получать связи между элементами в пользовательском интерфейсе с помощью трех возможных представлений: необработанных, элементов управления и содержимого. Представление элемента управления — это представление, которое часто используется клиентами автоматизации пользовательского интерфейса, так как оно обеспечивает хорошее представление и организацию элементов в пользовательском интерфейсе, которые являются интерактивными. Средства тестирования обычно позволяют выбрать, какое представление дерева использовать, когда инструмент представляет организацию элементов.

По умолчанию любой производный класс Control и несколько других элементов будут отображаться в представлении элемента управления, когда платформа автоматизации пользовательского интерфейса представляет пользовательский интерфейс для приложения Windows. Но иногда элемент не отображается в представлении элемента управления из-за композиции пользовательского интерфейса, где этот элемент дублирует информацию или представляет информацию, которая не имеет значения для сценариев специальных возможностей. Используйте присоединенное свойство AutomationProperties.AccessibilityView, чтобы изменить способ представления элементов в дереве. Если вы помещаете элемент в дерево необработанных , большинство вспомогательных технологий не будут сообщать об этом элементе в своих отчетах. Чтобы просмотреть некоторые примеры того, как это работает в существующих элементах управления, откройте файл XAML-макета generic.xaml в текстовом редакторе и найдите AutomationProperties.AccessibilityView в шаблонах.

Имя из внутреннего текста

Чтобы упростить использование строк, которые уже существуют в видимом пользовательском интерфейсе для значений доступных имен, многие элементы управления и другие элементы пользовательского интерфейса обеспечивают поддержку автоматического определения имени по умолчанию на основе внутреннего текста в элементе или строковых значений свойств контента.

  • TextBlock, RichTextBlock, TextBox и RichTextBlock каждый из них способствует значению свойства Text в качестве доступного имени по умолчанию.
  • Любой подкласс ContentControl использует итеративную технику "ToString" для поиска строк в его значении Content и устанавливает эти строки как имя по умолчанию.

Замечание

В соответствии со службой автоматизации пользовательского интерфейса длина доступного имени не может превышать 2048 символов. Если строка, используемая для автоматического определения доступного имени, превышает это ограничение, доступное имя усекается на этом этапе.

Доступные имена изображений

Для поддержки средств чтения с экрана и предоставления основных сведений об идентификации каждого элемента в пользовательском интерфейсе иногда необходимо предоставить замещающие тексты нетекстовые сведения, такие как изображения и диаграммы (исключая исключительно декоративные или структурные элементы). Эти элементы не имеют внутреннего текста, поэтому доступное имя не будет иметь вычисляемого значения. Вы можете задать доступное имя непосредственно, установив связанное свойство AutomationProperties.Name, как показано в этом примере.

XAML

<!-- Comment -->
<Image Source="product.png"
  AutomationProperties.Name="An image of a customer using the product."/>

В качестве альтернативы рассмотрите возможность включения текстовой надписи, которая будет отображаться в видимом пользовательском интерфейсе и служить информацией об доступности, связанной с содержимым изображения. Ниже приведен пример:

XAML

<Image HorizontalAlignment="Left" Width="480" x:Name="img_MyPix"
  Source="snoqualmie-NF.jpg"
  AutomationProperties.LabeledBy="{Binding ElementName=caption_MyPix}"/>
<TextBlock x:Name="caption_MyPix">Mount Snoqualmie Skiing</TextBlock>

Метки и идентифицированный по

Предпочтительный способ связать метку с элементом формы — использовать TextBlock с x:Name для текста меток, а затем задать присоединенное свойство AutomationProperties.LabeledBy в элементе формы для ссылки на метку TextBlock по имени XAML. Если вы используете этот шаблон, вспомогательные технологии смогут использовать текст метки как доступное имя для поля формы. Ниже приведен пример, показывающий этот метод.

XAML

<StackPanel x:Name="LayoutRoot" Background="White">
   <StackPanel Orientation="Horizontal">
     <TextBlock Name="lbl_FirstName">First name</TextBlock>
     <TextBox
      AutomationProperties.LabeledBy="{Binding ElementName=lbl_FirstName}"
      Name="tbFirstName" Width="100"/>
   </StackPanel>
   <StackPanel Orientation="Horizontal">
     <TextBlock Name="lbl_LastName">Last name</TextBlock>
     <TextBox
      AutomationProperties.LabeledBy="{Binding ElementName=lbl_LastName}"
      Name="tbLastName" Width="100"/>
   </StackPanel>
 </StackPanel>

Доступное описание (необязательно)

Описание доступности предоставляет дополнительные сведения о конкретном элементе пользовательского интерфейса. Обычно вы предоставляете доступное описание, когда само по себе доступное имя не передает назначение элемента.

Средство чтения с экрана экранного диктора считывает доступное описание элемента только в том случае, если пользователь запрашивает дополнительные сведения об элементе, нажав клавишу CapsLock+F.

Доступное имя предназначено для идентификации элемента управления, а не для полного документирования его поведения. Если краткое описание не достаточно, чтобы объяснить элемент управления, можно задать присоединенное свойство AutomationProperties.HelpText в дополнение к AutomationProperties.Name.

Тестирование доступности на ранних этапах и регулярно

В конечном счете, лучший подход для поддержки средств чтения с экрана заключается в тестировании приложения с помощью средства чтения с экрана самостоятельно. Это покажет, как работает средство чтения с экрана и какие основные сведения о специальных возможностях могут быть отсутствуют в приложении. Затем можно соответствующим образом настроить значения свойств пользовательского интерфейса или автоматизации пользовательского интерфейса. Дополнительные сведения см. в тестировании доступности.

Один из инструментов, которые можно использовать для тестирования доступности, называется AccScope. Инструмент AccScope особенно полезен, так как вы можете видеть визуальные представления пользовательского интерфейса, которые представляют, как вспомогательные технологии могут просматривать приложение как дерево автоматизации. В частности, есть режим экранного диктора, который дает представление о том, как экранный диктор получает текст из приложения и как он упорядочивает элементы в пользовательском интерфейсе. AccScope разработан таким образом, чтобы его можно было использовать и использовать в течение цикла разработки для приложения, даже на этапе предварительного проектирования. Дополнительные сведения см. в AccScope.

Доступные имена из динамических данных

Windows поддерживает множество элементов управления, которые можно использовать для отображения значений, поступающих из связанного источника данных, с помощью функции, известной как привязка данных. При заполнении списков элементами данных может потребоваться использовать метод, который задает доступные имена для элементов списка с привязкой к данным после заполнения начального списка. Дополнительные сведения см. в "Сценарий 4" в примере доступности XAML .

Доступные имена и локализация

Чтобы убедиться, что доступное имя также является локализованным элементом, следует использовать правильные методы хранения локализуемых строк в качестве ресурсов, а затем ссылаться на ресурсы с помощью директивы x:Uid с значениями . Если доступное имя поступает из явно заданного AutomationProperties.Name использования, убедитесь, что строка также локализована.

Обратите внимание, что присоединенные свойства, такие как свойства AutomationProperties , используют специальный синтаксис для имени ресурса, чтобы ресурс ссылался на присоединенное свойство, примененное к конкретному элементу. Например, имя ресурса для AutomationProperties.Name, применяемое к элементу пользовательского интерфейса с именемMediumButton: MediumButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name