什么是WinRT相当于InputBindings?

时间:2012-07-19 05:54:42

标签: c# wpf keyboard-shortcuts windows-runtime

WPF允许我轻松地将窗口级别的键盘快捷键绑定到使用InputBindings属性的方法。在WinRT中相当于什么?将键盘快捷键绑定到WinRT中的方法的正确方法是什么?

2 个答案:

答案 0 :(得分:7)

键盘快捷键描述为here。我想你想要access keysaccelerator keys

  

访问键是应用中UI的快捷方式。访问键由Alt键和字母键组成。

     

加速键是app命令的快捷方式。您的应用可能有也可能没有与命令完全对应的UI。加速键包括Ctrl键和字母键。

     

以下示例演示了媒体播放,暂停和停止按钮的快捷键的可访问实现:

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

请参阅@Magiel的答案,了解代码方面的实现细节。

答案 1 :(得分:5)

重要!! 设置AutomationProperties.AcceleratorKey或AutomationProperties.AccessKey不启用键盘功能。它仅向UI Automation框架报告应使用哪些密钥,以便可以通过辅助技术将这些信息传递给用户。密钥处理的实现仍然需要在代码中完成,而不是XAML。

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    // Set the input focus to ensure that keyboard events are raised.
    this.Loaded += delegate { this.Focus(FocusState.Programmatic); };
}

private void Grid_KeyUp(object sender, KeyRoutedEventArgs e)
{
    if (e.Key == VirtualKey.Control) isCtrlKeyPressed = false;
}

private void Grid_KeyDown(object sender, KeyRoutedEventArgs e)
{
    if (e.Key == VirtualKey.Control) isCtrlKeyPressed = true;
    else if (isCtrlKeyPressed)
    {
        switch (e.Key)
        {
            case VirtualKey.P: DemoMovie.Play(); break;
            case VirtualKey.A: DemoMovie.Pause(); break;
            case VirtualKey.S: DemoMovie.Stop(); break;
        }
    }
}