Udostępnij za pośrednictwem


Akceleratory klawiatury

Akceleratory klawiaturowe to skróty klawiaturowe, które zwiększają użyteczność i dostępność aplikacji interfejsu użytkownika aplikacji wieloplatformowych platformy .NET (.NET MAUI) na komputerach Mac Catalyst i Windows, zapewniając intuicyjny sposób na wywoływanie typowych akcji lub poleceń bez bezpośredniego nawigowania po interfejsie użytkownika aplikacji.

Akcelerator klawiatury składa się z dwóch składników:

  • Modyfikatory, które obejmują klawisze Shift, Ctrl i Alt.
  • Klucze, które obejmują klucze alfanumeryczne i klucze specjalne.

W programie .NET MAUI akceleratory klawiatury są skojarzone z poleceniami uwidocznianymi w menu i powinny być określone za pomocą elementu menu. W szczególności akceleratory klawiaturowe .NET MAUI można dołączyć do elementów menu na pasku menu na Komputerze Mac Catalyst i Windows, a także elementy menu w menu kontekstowym w systemie Windows. Aby uzyskać więcej informacji na temat pasków menu, zobacz Wyświetlanie paska menu w aplikacji klasycznej .NET MAUI. Aby uzyskać więcej informacji na temat menu kontekstowych, zobacz Wyświetlanie menu kontekstowego w aplikacji klasycznej .NET MAUI.

Na poniższych zrzutach ekranu przedstawiono elementy paska menu i elementy menu kontekstowego zawierające akceleratory klawiatury:

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

Akcelerator klawiatury jest reprezentowany przez KeyboardAccelerator klasę, która reprezentuje klawisz skrótu dla elementu MenuFlyoutItem. Klasa KeyboardAccelerator definiuje następujące właściwości:

  • Modifiers, typu KeyboardAcceleratorModifiers, który reprezentuje wartość modyfikatora, taką jak Ctrl lub Shift, dla skrótu klawiaturowego.
  • Key, typu string?, który reprezentuje wartość klawisza skrótu klawiaturowego.

Te właściwości są wspierane przez BindableProperty obiekty, co oznacza, że mogą być obiektami docelowymi powiązań danych.

Wyliczenie KeyboardAcceleratorModifiers definiuje następujące elementy członkowskie, które mają być używane jako wartości dla Modifiers właściwości:

  • None, który nie wskazuje modyfikatora.
  • Shift, który wskazuje modyfikator Shift na Mac Catalyst i Windows.
  • Ctrl, który wskazuje modyfikator sterowania na Mac Catalyst i Windows.
  • Alt, który wskazuje modyfikator opcji na Katalizator mac i modyfikator menu w systemie Windows.
  • Cmd, który wskazuje modyfikator poleceń na Mac Catalyst.
  • Windows, który wskazuje modyfikator systemu Windows w systemie Windows.

Ważne

Akceleratory klawiatury można dołączać do MenuFlyoutItem obiektów w MenuBarItem a na komputerach Mac Catalyst i Windows oraz w MenuFlyout systemie Windows.

W poniższej tabeli przedstawiono formaty skrótów klawiatury obsługiwane przez program .NET MAUI:

Platforma Pojedynczy klucz Wiele kluczy
Katalizator mac Akceleratory klawiaturowe bez modyfikatora z jednym klawiszem. Na przykład użycie klawisza F1 w celu wywołania akcji skojarzonej z elementem menu. Akceleratory klawiatury z co najmniej jednym modyfikatorem. Na przykład użyj polecenia CMD+SHIFT+S lub CMD+S w celu wywołania akcji skojarzonej z elementem menu.
Windows Akceleratory klawiatury z modyfikatorem i bez go z jednym klawiszem. Na przykład użycie klawisza F1 w celu wywołania akcji skojarzonej z elementem menu. Akceleratory klawiatury z co najmniej jednym modyfikatorem. Na przykład za pomocą klawiszy CTRL+SHIFT+F lub CTRL+F w celu wywołania akcji skojarzonej z elementem menu.

Tworzenie akceleratora klawiatury

Element KeyboardAccelerator można dołączyć do obiektu MenuFlyoutItem , dodając go do kolekcji KeyboardAccelerators :

<MenuFlyoutItem Text="Cut"
                Clicked="OnCutMenuFlyoutItemClicked">
    <MenuFlyoutItem.KeyboardAccelerators>
        <KeyboardAccelerator Modifiers="Ctrl"
                             Key="X" />
    </MenuFlyoutItem.KeyboardAccelerators>
</MenuFlyoutItem>

Akceleratory klawiatury można również określić w kodzie:

cutMenuFlyoutItem.KeyboardAccelerators.Add(new KeyboardAccelerator
{
    Modifiers = KeyboardAcceleratorModifiers.Ctrl,
    Key = "X"
});

Po naciśnięciu modyfikatora i klawisza klawiatury akcja skojarzona z akceleratorem MenuFlyoutItem jest wywoływana.

Ważne

Chociaż do kolekcji można dodać wiele KeyboardAccelerator obiektów, tylko pierwszy KeyboardAccelerator w kolekcji będzie miał swój skrót wyświetlany w obiekcie MenuFlyoutItem.MenuFlyoutItem.KeyboardAccelerators Ponadto na Komputerze Mac Catalyst tylko skrót klawiaturowy dla pierwszego KeyboardAccelerator w kolekcji spowoduje wywołanie akcji skojarzonej z elementem MenuFlyoutItem . Jednak w systemie Windows skróty klawiaturowe dla wszystkich KeyboardAccelerator obiektów w MenuFlyoutItem.KeyboardAccelerators kolekcji spowodują MenuFlyoutItem wywołanie akcji.

Określanie wielu modyfikatorów

Na obu platformach można określić KeyboardAccelerator wiele modyfikatorów:

<MenuFlyoutItem Text="Refresh"
                Command="{Binding RefreshCommand}">
    <MenuFlyoutItem.KeyboardAccelerators>
        <KeyboardAccelerator Modifiers="Shift,Ctrl"
                             Key="R" />
    </MenuFlyoutItem.KeyboardAccelerators>
</MenuFlyoutItem>

Równoważny kod języka C# to:

refreshMenuFlyoutItem.KeyboardAccelerators.Add(new KeyboardAccelerator
{
    Modifiers = KeyboardAcceleratorModifiers.Shift | KeyboardAcceleratorModifiers.Ctrl,
    Key = "R"
});

Określanie akceleratorów klawiatury na platformę

Różne modyfikatory akceleratora klawiatury i klawisze można określić na platformę OnPlatform w języku XAML z rozszerzeniem znaczników:

<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>

Równoważny kod języka C# to:

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
});

Używanie klawiszy specjalnych w akceleratorze klawiatury

W systemie Windows klucze specjalne można określić za pomocą stałej ciągu lub liczby całkowitej. Aby uzyskać listę stałych i liczb całkowitych, zobacz tabelę w pliku VirtualKey.

Uwaga

W systemie Windows obsługiwane są akceleratory pojedynczego klawisza (wszystkie klawisze alfanumeryczne i interpunkcyjne, Delete, F2, Spacja, Esc, Klawisz multimedialny) i akceleratory wieloklucze (Ctrl+Shift+M). Jednak klucze wirtualne gamepad nie są obsługiwane.

Na Komputerze Mac Catalyst klucze specjalne można określić za pomocą stałej ciągu. Aby uzyskać listę stałych reprezentujących ciągi wejściowe tekstu, które odpowiadają specjalnym kluczom, zobacz Ciągi wejściowe dla kluczy specjalnych w developer.apple.com.

Poniższy kod XAML przedstawia przykład definiowania akceleratora klawiatury, który używa specjalnego klawisza:

<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>

W tym przykładzie akcelerator klawiatury jest klawiszem F1, który jest określony za pośrednictwem stałej na obu platformach. W systemie Windows można go również określić za pomocą liczby całkowitej 112.

Lokalizowanie akcleratora klawiatury

Klawisze akceleratora klawiatury można lokalizować za pośrednictwem pliku zasobu platformy .NET. Następnie można pobrać zlokalizowany klucz przy użyciu x:Static rozszerzenia znaczników:

<MenuFlyoutItem Text="Cut"
                Clicked="OnCutMenuFlyoutItemClicked">
    <MenuFlyoutItem.KeyboardAccelerators>
        <KeyboardAccelerator Modifiers="Ctrl"
                             Key="{x:Static local:AppResources.CutAcceleratorKey}" />
    </MenuFlyoutItem.KeyboardAccelerators>
</MenuFlyoutItem>

Aby uzyskać więcej informacji, zobacz Lokalizacja.

Wyłączanie akceleratora klawiatury

Gdy element MenuFlyoutItem jest wyłączony, skojarzony akcelerator klawiatury jest również wyłączony:

<MenuFlyoutItem Text="Cut"
                Clicked="OnCutMenuFlyoutItemClicked"
                IsEnabled="false">
    <MenuFlyoutItem.KeyboardAccelerators>
        <KeyboardAccelerator Modifiers="Ctrl"
                             Key="X" />
    </MenuFlyoutItem.KeyboardAccelerators>
</MenuFlyoutItem>

W tym przykładzie, ponieważ IsEnabled właściwość MenuFlyoutItem obiektu jest ustawiona na , nie można wywołać falseskojarzonego akceleratora klawiatury CTRL+X.