Специальные возможности клавиатуры в Xamarin.Forms

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

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

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="0.5*" />
        <ColumnDefinition Width="0.5*" />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <Label Text="You"
           HorizontalOptions="Center" />
    <Label Grid.Column="1"
           Text="Manager"
           HorizontalOptions="Center" />
    <Entry Grid.Row="1"
           Placeholder="Enter forename" />
    <Entry Grid.Column="1"
           Grid.Row="1"
           Placeholder="Enter forename" />
    <Entry Grid.Row="2"
           Placeholder="Enter surname" />
    <Entry Grid.Column="1"
           Grid.Row="2"
           Placeholder="Enter surname" />
</Grid>

На следующем снимке экрана показана последовательность табуляции по умолчанию для этого примера кода:

Последовательность табуляции по умолчанию на основе строк

Здесь последовательность табуляции основана на строках и соответствует порядку элементов управления в XAML. Таким образом, при нажатии клавиши TAB выполняется переход по экземплярам имени Entry, а затем экземплярам фамилии Entry. Однако более интуитивно понятным было бы использование перехода по столбцам, чтобы при нажатии клавиши TAB выполнялся переход по парам имя-фамилия. Этого можно добиться, указав последовательность табуляции для элементов управления вводом.

Примечание.

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

Настройка последовательности табуляции

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

Следующие правила применяются при использовании последовательности табуляции по умолчанию или задании свойства TabIndex:

  • Экземпляры VisualElement с TabIndex, равным 0, добавляются в последовательность табуляции с учетом порядка их объявления в XAML или дочерних коллекциях.
  • Экземпляры VisualElement с TabIndex больше 0 добавляются в последовательность табуляции с учетом их значения TabIndex.
  • Экземпляры VisualElement с TabIndex меньше 0 добавляются в последовательность табуляции и отображаются до любого нулевого значения.
  • Конфликты для TabIndex устраняются в порядке объявления.

После определения последовательности табуляции нажатие клавиши TAB будет переключать фокус между элементами управления в порядке по возрастанию TabIndex с возвратом в начало после достижения конечного элемента управления.

Предупреждение

На универсальной платформе Windows свойству TabIndex каждого элемента управления должно быть задано значение int.MaxValue, чтобы последовательность табуляции совпадала с порядком объявления элементов управления.

Следующий пример XAML показывает свойство TabIndex, заданное в элементах управления вводом для обеспечения навигации по столбцам:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="0.5*" />
        <ColumnDefinition Width="0.5*" />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <Label Text="You"
           HorizontalOptions="Center" />
    <Label Grid.Column="1"
           Text="Manager"
           HorizontalOptions="Center" />
    <Entry Grid.Row="1"
           Placeholder="Enter forename"
           TabIndex="1" />
    <Entry Grid.Column="1"
           Grid.Row="1"
           Placeholder="Enter forename"
           TabIndex="3" />
    <Entry Grid.Row="2"
           Placeholder="Enter surname"
           TabIndex="2" />
    <Entry Grid.Column="1"
           Grid.Row="2"
           Placeholder="Enter surname"
           TabIndex="4" />
</Grid>

На следующем снимке экрана показана последовательность табуляции для этого примера кода:

Последовательность табуляции на основе столбцов

Здесь последовательность табуляции основана на столбцах. Таким образом, при нажатии клавиши TAB выполняется переход по парам имя-фамилия Entry.

Внимание

Средства чтения с экрана в iOS и Android будут учитывать TabIndex элемента VisualElement при чтении имен доступных элементов на экране.

Исключение элементов управления из последовательности табуляции

Кроме настройки последовательности табуляции для элементов управления, может потребоваться исключить элементы управления из этой последовательности. Один из способов сделать это заключается в задании значения false для свойства IsEnabled элементов управления, так как отключенные элементы управления исключаются из последовательности табуляции.

Однако может потребоваться исключить неотключенные элементы управления из последовательности табуляции. Это можно сделать с помощью свойства VisualElement.IsTabStop, которое указывает, включается ли VisualElement в навигацию по клавише TAB. Значение по умолчанию — true, и если оно равно false, элемент управления игнорируется инфраструктурой навигации по клавише TAB независимо от того, задано ли TabIndex.

Поддерживаемые элементы управления

Свойства TabIndex и IsTabStop поддерживаются для следующих элементов управления, которые принимает ввод с клавиатуры в одной или нескольких платформах:

Примечание.

Все эти элементы управления способны получать фокус по нажатию клавиши TAB не на всех платформах.