WPF允许我轻松地将窗口级别的键盘快捷键绑定到使用InputBindings属性的方法。在WinRT中相当于什么?将键盘快捷键绑定到WinRT中的方法的正确方法是什么?
答案 0 :(得分:7)
键盘快捷键描述为here。我想你想要access keys或accelerator 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" />
请参阅@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;
}
}
}