Сочетания клавиш
Акселераторы клавиатуры — это сочетания клавиш, которые повышают удобство использования и специальные возможности приложений многоплатформенного пользовательского интерфейса .NET (.NET MAUI) в Mac Catalyst и Windows, обеспечивая интуитивно понятный способ вызова распространенных действий или команд без прямого перехода к пользовательскому интерфейсу приложения.
Ускоритель клавиатуры состоит из двух компонентов:
- Модификаторы, включающие SHIFT, CTRL и ALT.
- Ключи, которые включают буквенно-цифровые ключи и специальные ключи.
В .NET MAUI акселераторы клавиатуры связаны с командами, предоставляемыми в меню, и должны быть указаны с элементом меню. В частности, акселераторы клавиатуры .NET MAUI можно подключить к элементам меню в строке меню в Mac Catalyst и Windows, а также в контекстных меню в Windows. Дополнительные сведения о строках меню см. в разделе "Отображение строки меню" в классическом приложении .NET MAUI. Дополнительные сведения о контекстных меню см. в разделе "Отображение контекстного меню" в классическом приложении .NET MAUI.
На следующих снимках экрана показаны элементы строки меню и элементы контекстного меню, включающие ускорители клавиатуры:
Ускоритель клавиатуры представлен классом KeyboardAccelerator , который представляет сочетание клавиш для a MenuFlyoutItem. Класс KeyboardAccelerator определяет следующие свойства:
- Modifiers, тип KeyboardAcceleratorModifiers, представляющий значение модификатора, например CTRL или SHIFT, для сочетания клавиш.
- Key
string?
тип , представляющий значение ключа для сочетания клавиш.
Эти свойства поддерживаются объектами, что означает, что они могут быть целевыми BindableProperty объектами привязок данных.
Перечисление KeyboardAcceleratorModifiers определяет следующие элементы, которые используются в качестве значений Modifiers для свойства:
None
, который указывает, что модификатор не указан.Shift
, указывающий модификатор SHIFT в Mac Catalyst и Windows.Ctrl
, указывающий модификатор элемента управления в Mac Catalyst и Windows.Alt
, указывающий модификатор параметров в Mac Catalyst и модификатор меню в Windows.Cmd
, указывающий модификатор команд в Mac Catalyst.Windows
, указывающий модификатор Windows в Windows.
Важно!
Ускорители клавиатуры можно подключить к MenuFlyoutItem объектам в MenuBarItem Mac Catalyst и Windows, а также в MenuFlyout Windows.
В следующей таблице описаны форматы акселератора клавиатуры .NET MAUI:
Платформа | Один ключ | Многоключевой ключ |
---|---|---|
Mac Catalyst | Ускорители клавиатуры без модификатора с одним ключом. Например, с помощью клавиши F1 для вызова действия, связанного с элементом меню. | Ускорители клавиатуры с одним или несколькими модификаторами с одним ключом. Например, использование CMD+SHIFT+S или CMD+S для вызова действия, связанного с элементом меню. |
Windows | Ускорители клавиатуры с модификатором и без нее с одним ключом. Например, с помощью клавиши F1 для вызова действия, связанного с элементом меню. | Ускорители клавиатуры с одним или несколькими модификаторами с одним ключом. Например, с помощью КЛАВИШ CTRL+SHIFT+F или CTRL+F для вызова действия, связанного с элементом меню. |
Создание акселератора клавиатуры
К KeyboardAccelerator ней MenuFlyoutItem можно подключиться, добавив ее в коллекцию KeyboardAccelerators :
<MenuFlyoutItem Text="Cut"
Clicked="OnCutMenuFlyoutItemClicked">
<MenuFlyoutItem.KeyboardAccelerators>
<KeyboardAccelerator Modifiers="Ctrl"
Key="X" />
</MenuFlyoutItem.KeyboardAccelerators>
</MenuFlyoutItem>
Ускорители клавиатуры также можно указать в коде:
cutMenuFlyoutItem.KeyboardAccelerators.Add(new KeyboardAccelerator
{
Modifiers = KeyboardAcceleratorModifiers.Ctrl,
Key = "X"
});
При нажатии модификатора ускорителя клавиатуры и нажатия клавиши вызывается действие, связанное с ним MenuFlyoutItem .
Важно!
Хотя в коллекцию можно добавить MenuFlyoutItem.KeyboardAccelerators
несколько KeyboardAccelerator объектов, в коллекции будет отображаться MenuFlyoutItemтолько первый KeyboardAccelerator элемент коллекции. Кроме того, в Mac Catalyst только сочетание клавиш для первого KeyboardAccelerator в коллекции приведет к вызову действия, связанного с вызываемой MenuFlyoutItem . Однако в Windows сочетания клавиш для всех KeyboardAccelerator объектов в MenuFlyoutItem.KeyboardAccelerators
коллекции вызываются MenuFlyoutItem .
Указание нескольких модификаторов
На обеих платформах можно указать KeyboardAccelerator несколько модификаторов:
<MenuFlyoutItem Text="Refresh"
Command="{Binding RefreshCommand}">
<MenuFlyoutItem.KeyboardAccelerators>
<KeyboardAccelerator Modifiers="Shift,Ctrl"
Key="R" />
</MenuFlyoutItem.KeyboardAccelerators>
</MenuFlyoutItem>
Эквивалентный код на C# выглядит так:
refreshMenuFlyoutItem.KeyboardAccelerators.Add(new KeyboardAccelerator
{
Modifiers = KeyboardAcceleratorModifiers.Shift | KeyboardAcceleratorModifiers.Ctrl,
Key = "R"
});
Указание акселераторов клавиатуры на платформу
Различные модификаторы и клавиши акселератора клавиатуры можно указать на каждую платформу в XAML с расширением OnPlatform
разметки:
<MenuFlyoutItem Text="Change Theme"
Command="{Binding ChangeThemeCommand}">
<MenuFlyoutItem.KeyboardAccelerators>
<KeyboardAccelerator Modifiers="{OnPlatform MacCatalyst=Cmd, WinUI=Windows}"
Key="{OnPlatform MacCatalyst=T, WinUI=C}" />
</MenuFlyoutItem.KeyboardAccelerators>
</MenuFlyoutItem>
Эквивалентный код на C# выглядит так:
KeyboardAcceleratorModifiers modifier = KeyboardAcceleratorModifiers.None;
string key = string.Empty;
if (DeviceInfo.Current.Platform == DevicePlatform.MacCatalyst)
{
modifier = KeyboardAcceleratorModifiers.Cmd;
key = "T";
}
else if (DeviceInfo.Current.Platform == DevicePlatform.WinUI)
{
modifier = KeyboardAcceleratorModifiers.Windows;
key = "C";
}
myMenuFlyoutItem.KeyboardAccelerators.Add(new KeyboardAccelerator
{
Modifiers = modifier,
Key = key
});
Использование специальных клавиш в акселераторе клавиатуры
В Windows специальные ключи можно указать с помощью строковой константы или целого числа. Список констант и целых чисел см. в VirtualKeyтаблице.
Примечание.
В Windows поддерживаются акселераторы с одним ключом (все буквенно-цифровые и знаки препинания, delete, F2, Пробел, Esc, Мультимедиа Key) и многоключевые акселераторы (CTRL+SHIFT+M). Однако виртуальные ключи Gamepad не поддерживаются.
В Mac Catalyst специальные ключи можно указать с помощью строковой константы. Список констант, представляющих текстовые входные строки, соответствующие специальным ключам, см. в разделе Входные строки для специальных ключей на developer.apple.com.
В следующем XAML показан пример определения акселератора клавиатуры, использующего специальный ключ:
<MenuFlyoutItem Text="Help"
Command="{Binding HelpCommand}">
<MenuFlyoutItem.KeyboardAccelerators>
<!-- Alternatively, 112 can be used to specify F1 on Windows -->
<KeyboardAccelerator Modifiers="None"
Key="{OnPlatform MacCatalyst=UIKeyInputF1, WinUI=F1}" />
</MenuFlyoutItem.KeyboardAccelerators>
</MenuFlyoutItem>
В этом примере ускоритель клавиатуры — это клавиша F1, которая указывается с помощью константы на обеих платформах. В Windows он также может быть указан целым числом 112.
Локализация аклератора клавиатуры
Клавиши акселератора клавиатуры можно локализовать с помощью файла ресурсов .NET. Затем локализованный ключ можно получить с помощью x:Static
расширения разметки:
<MenuFlyoutItem Text="Cut"
Clicked="OnCutMenuFlyoutItemClicked">
<MenuFlyoutItem.KeyboardAccelerators>
<KeyboardAccelerator Modifiers="Ctrl"
Key="{x:Static local:AppResources.CutAcceleratorKey}" />
</MenuFlyoutItem.KeyboardAccelerators>
</MenuFlyoutItem>
Подробнее об этом см. в разделе Локализация.
Отключение акселератора клавиатуры
При отключении связанный MenuFlyoutItem акселератор клавиатуры также отключен:
<MenuFlyoutItem Text="Cut"
Clicked="OnCutMenuFlyoutItemClicked"
IsEnabled="false">
<MenuFlyoutItem.KeyboardAccelerators>
<KeyboardAccelerator Modifiers="Ctrl"
Key="X" />
</MenuFlyoutItem.KeyboardAccelerators>
</MenuFlyoutItem>
В этом примере, поскольку IsEnabled
для свойства задано false
значениеMenuFlyoutItem, не удается вызвать связанный ускоритель клавиатуры CTRL+X.