【发布时间】:2013-02-07 12:19:18
【问题描述】:
无论哪个控件具有焦点,我如何捕获键盘快捷键?我不想为用户可以关注的每个可能的控件编写相同的内容。那么如何查看页面范围/独立于控件的快捷方式呢?
【问题讨论】:
标签: c# .net xaml windows-8 microsoft-metro
无论哪个控件具有焦点,我如何捕获键盘快捷键?我不想为用户可以关注的每个可能的控件编写相同的内容。那么如何查看页面范围/独立于控件的快捷方式呢?
【问题讨论】:
标签: c# .net xaml windows-8 microsoft-metro
将此代码添加到构造函数中,它将处理全局键按下和键
Window.Current.CoreWindow.KeyDown += CoreWindow_KeyDown;
Window.Current.CoreWindow.KeyUp += CoreWindow_KeyUp;
这是他们的活动
void CoreWindow_KeyUp(Windows.UI.Core.CoreWindow sender, Windows.UI.Core.KeyEventArgs args)
{
//this.Frame.Navigate(typeof(MainPage));
var key = args.VirtualKey;
string aa = args.ToString();
}
void CoreWindow_KeyDown(Windows.UI.Core.CoreWindow sender, Windows.UI.Core.KeyEventArgs args)
{
//this.Frame.Navigate(typeof(MainPage));
var key = args.VirtualKey;
string aa = args.ToString();
}
您可以在此事件中处理自己的逻辑。
【讨论】:
如何在根元素上设置事件处理程序?我认为事件最终会到达父控件,如果它没有在其他任何地方处理。 这是我为一个简单的 KeyDown 事件要做的事情。
<common:LayoutAwarePage
x:Name="pageRoot"
//elided
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" KeyDown="MyEventHandler">
【讨论】:
最好的解决方案是使用前面建议的根元素,因为全局快捷方式使用应用于每个页面的一个类的功能,这意味着必须在每个页面上单独处理每个快捷方式,否则可能会出错。
我的 XAML 设置如下:
<Page
Name="root"
...>
...
</Page>
我的 C# 操作那个页面是这样的:
...
namespace DenisQuiz.UWP
{
public sealed partial class StudyADeck : Page
{
...
public StudyADeck()
{
...
// Keyboard shortcuts
root.KeyDown += Root_KeyDown;
}
private void Root_KeyDown(object sender, KeyRoutedEventArgs e)
{
switch (e.Key)
{
case Windows.System.VirtualKey.F:
FlipCard();
break;
case Windows.System.VirtualKey.Right:
NextCard();
break;
case Windows.System.VirtualKey.Left:
PreviousCard();
break;
case Windows.System.VirtualKey.S:
Frame.GoBack(); // Stop Studying
break;
case Windows.System.VirtualKey.E:
Frame.Navigate(typeof(EditANotecard)); // Edit this card
break;
case Windows.System.VirtualKey.D:
DeleteNotecardAsync();
break;
default:
break;
}
}
...
名称root 可通过打开该窗口时的任何按键访问,通过表达式root.KeyDown += Root_KeyDown。这会调用Root_KeyDown() 方法,然后该方法可以根据keypress 参数KeyRoutedEventArgs e 发送的键实现任何功能。
我的代码实现了一个switch 语句来确定关键功能。
【讨论】: