鍵盤快速操作
鍵盤快捷方式是鍵盤快捷方式,可改善 Mac Catalyst 和 Windows 上 .NET 多平臺應用程式 UI (.NET MAUI) 應用程式的可用性和輔助功能,方法是提供直覺的方式讓使用者在不直接瀏覽應用程式 UI 的情況下叫用一般動作或命令。
鍵盤快捷方式是由兩個元件所組成:
- 修飾詞,包括 Shift、Ctrl 和 Alt。
- 索引鍵,包括英數位元索引鍵和特殊索引鍵。
在 .NET MAUI 中,鍵盤快捷鍵會與功能表公開的命令相關聯,而且應該使用功能表項來指定。 具體而言,.NET MAUI 鍵盤快捷方式可以附加至 Mac Catalyst 和 Windows 功能表欄中的功能表項,以及 Windows 操作選單中的功能表項。 如需功能表欄的詳細資訊,請參閱 在 .NET MAUI 傳統型應用程式中顯示功能表列。 如需操作功能表的詳細資訊,請參閱 在 .NET MAUI 傳統型應用程式中顯示操作功能表。
下列螢幕快照顯示功能表列專案,以及包含鍵盤快捷方式的操作選單項:
鍵盤快捷鍵是由 KeyboardAccelerator 類別表示,代表的 MenuFlyoutItem快速鍵。 類別 KeyboardAccelerator 會定義下列屬性:
- Modifiers類型 KeyboardAcceleratorModifiers為 ,代表鍵盤快捷方式的修飾詞值,例如 Ctrl 或 Shift。
- Key型
string?
別為 的 ,表示鍵盤快捷方式的按鍵值。
這些屬性是由 BindableProperty 物件所支援,這表示這些屬性可以是數據系結的目標。
列舉 KeyboardAcceleratorModifiers 會定義下列成員,做為 屬性的值 Modifiers :
None
,表示沒有修飾詞。Shift
,表示 Mac Catalyst 和 Windows 上的 Shift 修飾詞。Ctrl
,表示 Mac Catalyst 和 Windows 上的控件修飾詞。Alt
,表示 Mac Catalyst 上的 Option 修飾詞,以及 Windows 上的功能表修飾詞。Cmd
,表示 Mac Catalyst 上的 Command 修飾詞。Windows
,表示 Windows 上的 Windows 修飾詞。
重要
鍵盤快捷方式可以附加至 MenuFlyoutItem Mac Catalyst 和 Windows 上的 物件 MenuBarItem ,以及 Windows MenuFlyout 上的 。
下表概述 .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 動作。
重要
雖然可以將多個 KeyboardAccelerator 物件新增至 MenuFlyoutItem.KeyboardAccelerators
集合,但集合中的第一個 KeyboardAccelerator 物件只會顯示 MenuFlyoutItem其快捷方式。 此外,在 Mac Catalyst 上,只有集合中第一個 KeyboardAccelerator 的鍵盤快捷方式會導致叫用與相關聯的 MenuFlyoutItem 動作。 不過,在 Windows 上,集合中MenuFlyoutItem.KeyboardAccelerators
所有KeyboardAccelerator對象的鍵盤快捷方式會導致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、多媒體按鍵)和多鍵快捷鍵(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 指定。
將鍵盤 acclerator 當地語系化
鍵盤快捷鍵可以透過 .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
,由於的 MenuFlyoutItem 屬性設定為 false
,因此無法叫用相關聯的 CTRL+X 鍵盤快捷鍵。