WinRT中与InputBindings等效的是什么?

7

在WPF中,我可以使用InputBindings属性很容易地将键盘快捷方式绑定到窗口级别的方法。在WinRT中有什么等价物呢?在WinRT中将键盘快捷方式绑定到方法的正确方法是什么?

2个回答

7

键盘快捷键在这里描述。我认为你想要的是访问键加速键

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

加速键是应用程序命令的快捷方式。您的应用程序可能与该命令完全对应的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" />

重要提示:设置AutomationProperties.AcceleratorKey或AutomationProperties.AccessKey并不会启用键盘功能,它只是向UI自动化框架报告应该使用哪些键,以便通过辅助技术将此信息传递给用户。键处理的实现仍然需要在代码中完成,而不是XAML中。您仍需要在相关控件上附加KeyDown或KeyUp事件的处理程序,以实际实现应用程序中的键盘快捷键行为。此外,访问键的下划线文本装饰不会自动提供。如果您希望在UI中显示下划线文本,则必须显式地使用内联下划线格式设置来下划线特定键的文本。请参见@Magiel的答案,了解代码方面的实现细节。

那么MouseBinding呢?请参考StackOverflow问题https://dev59.com/knNA5IYBdhLWcg3wKacx#7354984。 - Stefano.net
@Stefano.net 我不确定你的意思。你是指鼠标绑定吗? - N_A
通过InputBinding(或等效方式)将鼠标事件附加到不直接处理的对象,例如矩形。 - Stefano.net
@Stefano.net 啊,你想给控件添加事件?那将是一个完全不同的问题,但我认为答案应该是组合。只需更改已实现所需事件的控件模板即可。 - N_A
虽然第一个链接包含了一些有用的信息,但你的其余回答是误导性的,因为它暗示指定工具提示、AutomationProperties或者下划线访问键可能使按键起作用。从用户体验角度来看,传达这些键组合对于用户很重要,但这并不能使它们真正起作用。你需要在根控件或Window.Current.CoreWindow上处理KeyUp/KeyDown事件(如果没有控件获得焦点,我认为前者不起作用)。 - Filip Skakun
@FilipSkakun 看来我复制的文档有误。我已经从最新的文档中添加了更新的信息。 - N_A

5

重要提示!设置AutomationProperties.AcceleratorKey或AutomationProperties.AccessKey并不会启用键盘功能。它只是向UI自动化框架报告应使用哪些键,以便通过辅助技术将此信息传递给用户。键处理的实现仍然需要在代码中完成,而不是在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;
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接