what is the WinRT equivalent of InputBindings?

c#, keyboard-shortcuts, windows-runtime, wpf

Solution

Keyboard shortcuts are described here. I think you want either access keys or accelerator keys.

An access key is a shortcut to a piece of UI in your app. Access keys consist of the Alt key plus a letter key.

An accelerator key is a shortcut to an app command. Your app may or may not have UI that corresponds exactly to the command. Accelerator keys consist of the Ctrl key plus a letter key.

The following example demonstrates the accessible implementation of shortcut keys for media play, pause, and stop buttons:

<MediaElement x:Name="Movie" Source="sample.wmv"
  AutoPlay="False" Width="320" Height="240"/>

<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">

  <Button x:Name="Play" Margin="1,2"
    ToolTipService.ToolTip="shortcut key: Ctrl+P"
    AutomationProperties.AccessKey="Control P">
    <TextBlock><Underline>P</Underline>lay</TextBlock>
  </Button>

  <Button x:Name="Pause" Margin="1,2"
    ToolTipService.ToolTip="shortcut key: Ctrl+A"
    AutomationProperties.AccessKey="Control A">
    <TextBlock>P<Underline>a</Underline>use</TextBlock>
  </Button>

  <Button x:Name="Stop" Margin="1,2"
    ToolTipService.ToolTip="shortcut key: Ctrl+S"
    AutomationProperties.AccessKey="Control S">
    <TextBlock><Underline>S</Underline>top</TextBlock>
  </Button>

</StackPanel>

<object AutomationProperties.AcceleratorKey="ALT+F" />

Important: Setting AutomationProperties.AcceleratorKey or AutomationProperties.AccessKey doesn't enable keyboard functionality. It only reports to the UI Automation framework what keys should be used, so that such information can be passed on to users via assistive technologies. The implementation for key handling still needs to be done in code, not XAML. You will still need to attach handlers for KeyDown or KeyUp events on the relevant control in order to actually implement the keyboard shortcut behavior in your app. Also, the underline text decoration for an access key is not provided automatically. You must explicitly underline the text for the specific key in your mnemonic as inline Underline formatting if you wish to show underlined text in the UI.

See @Magiel's answer for implementation details for the code-side of things.

Problem

WPF allows me to easily bind keyboard shortcuts at the window level to a method using the InputBindings property. What is the equivalent of this in WinRT? What is the right way to bind keyboard shortcuts to methods in WinRT?

Original source

Related problems