UWP 中是否有 WPF“KeyBinding”的替代方案?

Tal*_*me2 1 c# wpf key-bindings uwp

在我的 WPF 应用程序中,我使用下面编写的内容将 F10 键的按键绑定到运行脚本中名为“btn_font_click”的方法。然而,显然 UWP 不支持 XAML 中的直接键绑定,因为它是通用的并且不是为 Windows 设计的。

有什么方法可以在 UWP 应用程序中获得相同的效果吗?

<Window.Resources>
     <RoutedUICommand x:Key="cmd1"></RoutedUICommand>
</Window.Resources>
<Window.CommandBindings>
     <CommandBinding Command="{StaticResource cmd1}" 
     Executed="btn_font_Click"> 
     </CommandBinding>
</Window.CommandBindings>
<Window.InputBindings>
     <KeyBinding  Key="F10" Command="{StaticResource cmd1}"></KeyBinding>
</Window.InputBindings>
Run Code Online (Sandbox Code Playgroud)

我正在使用 RFID 读取器输入数据。目前,当扫描 RFID 卡时,会按 F10,键入其数据,然后按 Enter。我的想法是 F10 将键盘焦点设置到文本框,然后脚本等待输入按键,同时 RFID 键入其数据,然后获取文本框中的内容并将其拆分为数组以在应用程序中使用。

如果有更好或更直接的方法将数据从 RFID 卡内获取到我的阵列,我愿意接受其他潜在的解决方案。

编辑:经过一段时间的研究,我发现“键盘加速器”最适合该程序的当前功能,因为我希望 RFID 卡在应用程序不处于焦点时仍然可以工作。我可以获得一些关于如何设置键盘加速器将 F10 按键链接到运行我的方法的指示吗?

Mar*_*und 8

如果您想设置这种应用程序范围的键盘快捷键机制,激活器绝对是一种方法。

有一个关于可用键盘加速器的文档,并且自秋季创作者更新以来此功能可用。每个UIElement都有一个KeyboardAccelerators集合,它允许您定义与其交互的键盘加速器。如果按钮和菜单项调用指定的快捷方式,则会自动调用控件,但为了使您TextBox集中注意力,您必须使用Invoked事件自己指定此行为:

<TextBox>
    <TextBox.KeyboardAccelerators>                
            <KeyboardAccelerator Modifiers="None"                       
                Key="F10" Invoked="KeyboardAccelerator_OnInvoked" />
    </TextBox.KeyboardAccelerators>
</TextBox>
Run Code Online (Sandbox Code Playgroud)

然后在事件处理程序中TextBox重点关注:

private void KeyboardAccelerator_OnInvoked(
      KeyboardAccelerator sender, 
      KeyboardAcceleratorInvokedEventArgs args )
{
    (args.Element as Control).Focus(FocusState.Keyboard);
}
Run Code Online (Sandbox Code Playgroud)

KeyboardAcceleratorInvokedEventArgs.Element属性包含对 our 的引用TextBox,我将其转换为,因为这是声明该方法Control的父级,并且您可以在任何可聚焦控件上重用此方法。TextBoxFocus