共用方式為


鍵盤快速操作

鍵盤快捷方式是鍵盤快捷方式,可改善 Mac Catalyst 和 Windows 上 .NET 多平臺應用程式 UI (.NET MAUI) 應用程式的可用性和輔助功能,方法是提供直覺的方式讓使用者在不直接瀏覽應用程式 UI 的情況下叫用一般動作或命令。

鍵盤快捷方式是由兩個元件所組成:

  • 修飾詞,包括 Shift、Ctrl 和 Alt。
  • 索引鍵,包括英數位元索引鍵和特殊索引鍵。

在 .NET MAUI 中,鍵盤快捷鍵會與功能表公開的命令相關聯,而且應該使用功能表項來指定。 具體而言,.NET MAUI 鍵盤快捷方式可以附加至 Mac Catalyst 和 Windows 功能表欄中的功能表項,以及 Windows 操作選單中的功能表項。 如需功能表欄的詳細資訊,請參閱 在 .NET MAUI 傳統型應用程式中顯示功能表列。 如需操作功能表的詳細資訊,請參閱 在 .NET MAUI 傳統型應用程式中顯示操作功能表。

下列螢幕快照顯示功能表列專案,以及包含鍵盤快捷方式的操作選單項:

Screenshot of menu bar items that include keyboard accelerators.Screenshot of context menu items that include keyboard accelerators.

鍵盤快捷鍵是由 KeyboardAccelerator 類別表示,代表的 MenuFlyoutItem快速鍵。 類別 KeyboardAccelerator 會定義下列屬性:

這些屬性是由 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可以藉由將 加入至MenuFlyoutItemKeyboardAccelerators集合,以附加至 :

<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 鍵盤快捷鍵。