다음을 통해 공유


키보드 액셀러레이터

바로 가기 키는 사용자가 앱 UI를 직접 탐색하지 않고도 일반적인 작업 또는 명령을 호출할 수 있는 직관적인 방법을 제공하여 Mac Catalyst 및 Windows에서 .NET 다중 플랫폼 앱 UI(.NET MAUI) 앱의 유용성과 접근성을 향상시키는 바로 가기 키입니다.

키보드 가속기는 다음 두 가지 구성 요소로 구성됩니다.

  • 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 클래스는 다음 속성을 정의합니다.

  • Modifiers키 바로 가기 키에 대한 한정자 값(예: Ctrl 또는 Shift)을 나타내는 형식 KeyboardAcceleratorModifiers의 입니다.
  • Key- 바로 가기 키의 키 값을 나타내는 형식 string?입니다.

이러한 속성은 개체에 의해 BindableProperty 지원되므로 데이터 바인딩의 대상이 될 수 있습니다.

열거형은 KeyboardAcceleratorModifiers 속성 값으로 사용할 다음 멤버를 Modifiers 정의합니다.

  • None- 한정자를 나타내지 않습니다.
  • ShiftMac Catalyst 및 Windows의 Shift 한정자를 나타냅니다.
  • CtrlMac Catalyst 및 Windows의 컨트롤 한정자를 나타내는 입니다.
  • Alt- Mac Catalyst의 옵션 한정자와 Windows의 메뉴 한정자를 나타냅니다.
  • CmdMac Catalyst의 명령 한정자를 나타내는 입니다.
  • Windows- Windows의 Windows 한정자를 나타냅니다.

Important

키보드 가속기는 Mac Catalyst 및 Windows 및 Windows MenuFlyout 의 개체 MenuBarItem 에 연결할 MenuFlyoutItem 수 있습니다.

다음 표에서는 .NET MAUI에서 지원하는 키보드 가속기 형식을 간략하게 설명합니다.

플랫폼 단일 키 다중 키
Mac Catalyst 한정자가 없는 키보드 가속기(단일 키 포함) 예를 들어 F1 키를 사용하여 메뉴 항목과 연결된 작업을 호출합니다. 하나 이상의 한정자가 있는 키보드 가속기(단일 키 사용) 예를 들어 CMD+SHIFT+S 또는 CMD+S를 사용하여 메뉴 항목과 연결된 작업을 호출합니다.
Windows 한정자가 있고 없는 키보드 가속기(단일 키 포함) 예를 들어 F1 키를 사용하여 메뉴 항목과 연결된 작업을 호출합니다. 하나 이상의 한정자가 있는 키보드 가속기(단일 키 사용) 예를 들어 Ctrl+Shift+F 또는 Ctrl+F를 사용하여 메뉴 항목과 연결된 작업을 호출합니다.

키보드 가속기 만들기

A KeyboardAccelerator 는 컬렉션에 MenuFlyoutItem 추가하여 A를 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 작업이 호출됩니다.

Important

컬렉션에 여러 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에서는 단일 키 가속기(모든 영숫자 및 문장 부호 키, 삭제, F2, 스페이스바, Esc, 멀티미디어 키) 및 다중 키 가속기(Ctrl+Shift+M)가 지원됩니다. 그러나 게임 패드 가상 키는 지원되지 않습니다.

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>

자세한 내용은 지역화를 참조하세요.

키보드 가속기 비활성화

A를 MenuFlyoutItem 사용하지 않도록 설정하면 연결된 키보드 가속기도 사용하지 않도록 설정됩니다.

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

이 예제에서는 속성 MenuFlyoutItemIsEnabled 설정되므로 false연결된 Ctrl+X 키보드 가속기를 호출할 수 없습니다.