Ключи доступа

Клавиши доступа — это сочетания клавиш, которые могут повысить удобство использования и улучшить специальные возможности Windows-приложений, предоставляя пользователям интуитивно понятный способ навигации и взаимодействия с видимым пользовательским интерфейсом приложения с помощью клавиатуры вместо указывающего устройства (например, сенсорного ввода или мыши).

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

Примечание

Клавиатура незаменима для пользователей с определенными ограниченными способностями (см. Специальные возможности клавиатуры), а также является важным средством для тех, кто считает ее более эффективным способом для взаимодействия с приложением.

Подробные сведения о вызове стандартных действий в Windows-приложении с помощью сочетаний клавиш см. в разделе Ускорители клавиатуры.

Сведения о создании пользовательских сочетаний клавиш см. в разделе события клавиатуры .

Обзор

Клавиша доступа — это сочетание клавиши Alt и одной из буквенно-цифровых клавиш, иногда называемых назначенными. Обычно их нажимают последовательно, а не одновременно.

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

Примечание

Сочетания клавиш поддерживаются автоматически для клавиши доступа с одним алфавитно-цифровым символом. Например, при одновременном нажатии клавиш Alt + F в Word открывается меню "Файл" без отображения подсказок клавиш.

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

Приложения Microsoft Office предоставляют широкие возможности для клавиш доступа. На изображении ниже показана вкладка "Главная" в текстовом редакторе Word с активированными клавишами доступа (обратите внимание как на числа, так и на множественные нажатия клавиш).

Значки подсказок клавиш доступа в Microsoft Word

Значки подсказок клавиш доступа в Microsoft Word

Чтобы добавить к элементу управления клавишу доступа, используйте свойство AccessKey. С помощью значения этого свойства определяются последовательность клавиш доступа, сочетание клавиш (если одна буквенно-цифровая) и подсказка клавиши.

<Button Content="Accept" AccessKey="A" Click="AcceptButtonClick" />

Когда следует использовать клавиши доступа

Рекомендуется указывать клавиши доступа всегда, когда это уместно в пользовательском интерфейсе, и предусматривать поддержку клавиш доступа во всех пользовательских элементах управления.

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

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

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

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

Определение области клавиши доступа

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

Например, Microsoft Word предоставляет две ключевые области доступа: основную для вкладок ленты и вторичную для команд на вкладке выбранного.

На следующих изображениях показаны две области клавиш доступа в Word. В первой отображаются основные клавиши доступа, с помощью которых пользователь может выбрать вкладку и команды верхнего уровня, а во второй отображаются дополнительные клавиши доступа для вкладки "Главная".

первичные ключи доступа в Microsoft Word первичных ключах доступа в Microsoft Word

вторичные ключи доступа в Microsoft Word вторичные ключи доступа в Microsoft Word

Клавиши доступа можно дублировать для элементов в различных областях. В предыдущем примере "2" — это клавиша доступа для команды "Отмена" в основной области, а также "Курсив" в дополнительной области.

Здесь мы покажем, как определить область клавиши доступа.

<CommandBar x:Name="MainCommandBar" AccessKey="M" >
    <AppBarButton AccessKey="G" Icon="Globe" Label="Go"/>
    <AppBarButton AccessKey="S" Icon="Stop" Label="Stop"/>
    <AppBarSeparator/>
    <AppBarButton AccessKey="R" Icon="Refresh" Label="Refresh" IsAccessKeyScope="True">
        <AppBarButton.Flyout>
            <MenuFlyout>
                <MenuFlyoutItem AccessKey="A" Icon="Globe" Text="Refresh A" />
                <MenuFlyoutItem AccessKey="B" Icon="Globe" Text="Refresh B" />
                <MenuFlyoutItem AccessKey="C" Icon="Globe" Text="Refresh C" />
                <MenuFlyoutItem AccessKey="D" Icon="Globe" Text="Refresh D" />
            </MenuFlyout>
        </AppBarButton.Flyout>
    </AppBarButton>
    <AppBarButton AccessKey="B" Icon="Back" Label="Back"/>
    <AppBarButton AccessKey="F" Icon="Forward" Label="Forward"/>
    <AppBarSeparator/>
    <AppBarToggleButton AccessKey="V" Icon="Favorite" Label="Favorite"/>
    <CommandBar.SecondaryCommands>
        <AppBarToggleButton Icon="Like" AccessKey="L" Label="Like"/>
        <AppBarButton Icon="Setting" AccessKey="T" Label="Settings" />
    </CommandBar.SecondaryCommands>
</CommandBar>

Основные клавиши доступа для CommandBar

Основная область CommandBar и поддерживаемые клавиши доступа

Дополнительные клавиши доступа для CommandBar

Дополнительная область CommandBar и поддерживаемые клавиши доступа

Windows 10 Creators Update и более ранние версии

До выхода Windows 10 Fall Creators Update некоторые элементы управления, например CommandBar, не поддерживали встроенные области клавиш доступа.

В примере ниже рассматривается, как поддерживать SecondaryCommands в CommandBar с клавишами доступа, доступными после вызова родительской команды (аналогично ленте в Microsoft Word).

<local:CommandBarHack x:Name="MainCommandBar" AccessKey="M" >
    <AppBarButton AccessKey="G" Icon="Globe" Label="Go"/>
    <AppBarButton AccessKey="S" Icon="Stop" Label="Stop"/>
    <AppBarSeparator/>
    <AppBarButton AccessKey="R" Icon="Refresh" Label="Refresh" IsAccessKeyScope="True">
        <AppBarButton.Flyout>
            <MenuFlyout>
                <MenuFlyoutItem AccessKey="A" Icon="Globe" Text="Refresh A" />
                <MenuFlyoutItem AccessKey="B" Icon="Globe" Text="Refresh B" />
                <MenuFlyoutItem AccessKey="C" Icon="Globe" Text="Refresh C" />
                <MenuFlyoutItem AccessKey="D" Icon="Globe" Text="Refresh D" />
            </MenuFlyout>
        </AppBarButton.Flyout>
    </AppBarButton>
    <AppBarButton AccessKey="B" Icon="Back" Label="Back"/>
    <AppBarButton AccessKey="F" Icon="Forward" Label="Forward"/>
    <AppBarSeparator/>
    <AppBarToggleButton AccessKey="V" Icon="Favorite" Label="Favorite"/>
    <CommandBar.SecondaryCommands>
        <AppBarToggleButton Icon="Like" AccessKey="L" Label="Like"/>
        <AppBarButton Icon="Setting" AccessKey="T" Label="Settings" />
    </CommandBar.SecondaryCommands>
</local:CommandBarHack>
public class CommandBarHack : CommandBar
{
    CommandBarOverflowPresenter secondaryItemsControl;
    Popup overflowPopup;

    public CommandBarHack()
    {
        this.ExitDisplayModeOnAccessKeyInvoked = false;
        AccessKeyInvoked += OnAccessKeyInvoked;
    }

    protected override void OnApplyTemplate()
    {
        base.OnApplyTemplate();

        Button moreButton = GetTemplateChild("MoreButton") as Button;
        moreButton.SetValue(Control.IsTemplateKeyTipTargetProperty, true);
        moreButton.IsAccessKeyScope = true;

        // SecondaryItemsControl changes
        secondaryItemsControl = GetTemplateChild("SecondaryItemsControl") as CommandBarOverflowPresenter;
        secondaryItemsControl.AccessKeyScopeOwner = moreButton;

        overflowPopup = GetTemplateChild("OverflowPopup") as Popup;
    }

    private void OnAccessKeyInvoked(UIElement sender, AccessKeyInvokedEventArgs args)
    {
        if (overflowPopup != null)
        {
            overflowPopup.Opened += SecondaryMenuOpened;
        }
    }

    private void SecondaryMenuOpened(object sender, object e)
    {
        //This is not neccesay given we are automatically pushing the scope.
        var item = secondaryItemsControl.Items.First();
        if (item != null && item is Control)
        {
            (item as Control).Focus(FocusState.Keyboard);
        }
        overflowPopup.Opened -= SecondaryMenuOpened;
    }
}

Предотвращение конфликтов клавиш доступа

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

Система решает проблему с дублирующимися клавишами доступа, обрабатывая клавишу доступа первого элемента, добавленного в визуальное дерево, и игнорируя все остальные.

Если несколько клавиш доступа начинаются с одного и того же символа (например, "A", "A1" и "AB"), система обрабатывает один символ клавиши доступа и игнорирует все остальные.

Во избежание конфликтов используйте уникальные клавиши доступа или разделяйте команды по областям.

Выбор клавиш доступа

При выборе клавиш доступа придерживайтесь следующих рекомендаций:

  • Используйте один символ, чтобы уменьшить количество нажатий клавиш и поддерживать сочетания клавиш по умолчанию (Alt + AccessKey).
  • Не используйте более двух символов.
  • Избегайте конфликтов клавиш доступа.
  • Избегайте символов, которые сложно отличить от других (например, буква "З" и цифра "3", буква "O" и цифра "0").
  • Используйте известные варианты из других популярных приложений, таких как Word ("Ф" для "Файл", "Я" для "Главная" и т. д.).
  • Используйте первый символ имени команды или символ, тесно связанный с командой, который поможет вспомнить ее название.
    • Если первая буква уже назначена, используйте букву, максимально близкую к первой букве имени команды ("С" для "Вставка").
    • Используйте четкий согласный, содержащийся в имени команды ("К" для "Ссылки").
    • Используйте гласный, содержащийся в имени команды.

Локализация клавиш доступа

Если приложение будет локализовано на нескольких языков, следует рассмотреть локализацию клавиш доступа. Например, "H" для "Home" в en-US и "Я" для "Главная" в ru-RU.

Используйте расширение x:Uid в разметке, чтобы применить локализованные ресурсы, как показано здесь:

<Button Content="Home" AccessKey="H" x:Uid="HomeButton" />

Ресурсы для каждого языка добавляются в соответствующие папки строк в проекте:

Папки строк английских и испанских ресурсов

Папки строк английских и испанских ресурсов

Локализованные клавиши доступа указаны в файле resources.resw проектов:

Укажите свойство AccessKey, указанное в файле resources.resw

Укажите свойство AccessKey, указанное в файле resources.resw

Дополнительные сведения см. на странице Перевод ресурсов интерфейса

Положение подсказок клавиш

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

Как правило, расположение подсказки клавиши по умолчанию достаточное и обеспечивает встроенную поддержку для адаптивного пользовательского интерфейса.

Пример размещения автоматической подсказки клавиши

Пример размещения автоматической подсказки клавиши

Но если нужен дополнительный контроль над размещением подсказки клавиши, рекомендуется следующее:

  1. Принцип очевидной связи: пользователь может легко связать элемент управления с подсказкой клавиши.

    а. Подсказка KeyTip должна находиться рядом с элементом, для которого есть клавиша доступа (владельцем).
    b. Подсказка KeyTip не должна закрывать включенные элементы, имеющие клавиши доступа.
    c. Если подсказку KeyTip невозможно разместить рядом с ее владельцем, она должна перекрывать владельца.

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

    а. Подсказка KeyTip никогда не должна перекрывать другие подсказки клавиш.

  3. Простое сканирование: пользователь может легко считывает ключ Советы.

    а. Подсказки клавиш должны быть совмещены друг с другом и элементом пользовательского интерфейса. b. Подсказки клавиш должны быть максимально сгруппированы.

Относительное положение

Используйте свойство KeyTipPlacementMode для настройки местоположения подсказки клавиши каждого элемента или группы.

Режимы размещения: вверху, внизу, справа, слева, скрыто, по центру и автоматически.

Снимок экрана, показывающий относительные положения режимов размещения ключевых советов

Режимы размещения подсказки клавиши

Строка центра элемента управления используется для расчета выравнивания KeyTip по горизонтали и вертикали.

В следующем примере показано, как задать расположение подсказки клавиши для группы элементов с помощью свойства KeyTipPlacementMode контейнера StackPanel.

<StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" KeyTipPlacementMode="Top">
  <Button Content="File" AccessKey="F" />
  <Button Content="Home" AccessKey="H" />
  <Button Content="Insert" AccessKey="N" />
</StackPanel>

Смещения

Используйте свойства KeyTipHorizontalOffset и KeyTipVerticalOffset элемента для более точного размещения подсказки клавиши.

Примечание

Невозможно установить смещения, если для KeyTipPlacementMode установлено значение Auto.

Свойство KeyTipHorizontalOffset указывает, насколько далеко будет перемещена подсказка клавиши влево или вправо.

Снимок экрана с вертикальными и горизонтальными смещениями ключевых подсказок для кнопки

Установка смещения вертикальных и горизонтальных ключевых подсказок для кнопки

<Button
  Content="File"
  AccessKey="F"
  KeyTipPlacementMode="Bottom"
  KeyTipHorizontalOffset="20"
  KeyTipVerticalOffset="-8" />

Выравнивание по краю экрана {#screen-edge-alignment .ListParagraph}

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

Снимок экрана: выравнивание по границе экрана ключевых подсказок

ключевые Советы автоматически располагаются на основе границы экрана

Стиль подсказок клавиш

Рекомендуем использовать встроенную в подсказке клавиш поддержку тем платформы, включая высокую контрастность.

Если необходимо указать собственные стили подсказки клавиши, используйте ресурсы приложения, такие как KeyTipFontSize (размер шрифта), KeyTipFontFamily (семейство шрифтов), KeyTipBackground (фон), KeyTipForeground (передний план), KeyTipPadding (заполнения), KeyTipBorderBrush (цвет границы) и KeyTipBorderThemeThickness (толщина границы).

Снимок экрана с ключевыми параметрами настройки подсказок, включая шрифт, порядок и цвет

Параметры настройки подсказки клавиши

В этом примере показано, как изменять эти ресурсы приложения:

<Application.Resources>
 <SolidColorBrush Color="DarkGray" x:Key="MyBackgroundColor" />
 <SolidColorBrush Color="White" x:Key="MyForegroundColor" />
 <SolidColorBrush Color="Black" x:Key="MyBorderColor" />
 <StaticResource x:Key="KeyTipBackground" ResourceKey="MyBackgroundColor" />
 <StaticResource x:Key="KeyTipForeground" ResourceKey="MyForegroundColor" />
 <StaticResource x:Key="KeyTipBorderBrush" ResourceKey="MyBorderColor"/>
 <FontFamily x:Key="KeyTipFontFamily">Consolas</FontFamily>
 <x:Double x:Key="KeyTipContentThemeFontSize">18</x:Double>
 <Thickness x:Key="KeyTipBorderThemeThickness">2</Thickness>
 <Thickness x:Key="KeyTipThemePadding">4,4,4,4</Thickness>
</Application.Resources>

Клавиши доступа и экранный диктор

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

Если задать свойство AccessKey на элементе управления UIElement или TextElement, можно использовать свойство AutomationProperties.AccessKey для получения этого значения. Помощники, такие как экранный диктор, считывают значение этого свойства каждый раз, когда элемент получает фокус.

Примеры