我打算将对许多键盘上的“后退”和“前进”按钮的支持添加到我的WPF应用程序中,但是我一直在努力使它们起作用。

我尝试过将标准的KeyBinding应用于BrowserBack和BrowserForward,一点都不高兴。我用ESC键测试了代码,以确保它可以正常工作,并且该键很好。

Nextup我处理了KeyUp事件,但是发送的密钥是“ System”,这是没有用的,如果我使用KeyInterop.VirtualKeyFromKey,我只会得到0。

我开始认为PInvoke /捕获真实的窗口消息将是唯一的选择,但是我宁愿避免有人提出任何聪明的主意吗?

哦,按键本身就可以正常工作,并且我的键盘已插入;-)

更新:他们建议使用SystemKey使我可以使用它:

new KeyBinding(TestCommand, new KeyGesture(Key.Left, ModifierKeys.Alt));


这似乎适用于键盘按钮,但不适用于相应的触摸“轻拂”(模拟下一个和后一个)。这些轻弹在浏览器中可以正常工作,但是根据我的KeyUp事件,它们发送的只是“ LeftAlt”而已!

**再次更新**:Rich的评论使我对此:

this.CommandBindings.Add(new CommandBinding(NavigationCommands.BrowseBack, BrowseBack_Executed));
this.CommandBindings.Add(new CommandBinding(NavigationCommands.BrowseForward, BrowseForward_Executed));


似乎也可以治疗..轻弹!

最佳答案

您引用的按钮在WPF中被处理为MediaCommands,NavigationCommands,ApplicationCommands,EditingCommands或ComponentCommands-您需要为要拦截的每个按钮添加CommandBinding,例如:

<Window.CommandBindings>
<CommandBinding Command="MediaCommands.PreviousTrack"
                Executed="PreviousTrackCommandBinding_Executed"/>
<CommandBinding Command="MediaCommands.NextTrack"
                Executed="NextTrackCommandBinding_Executed"/>


并在后面的代码中添加相关事件:

private void PreviousTrackCommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)
{
    MessageBox.Show("Previous track");
}
private void NextTrackCommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)
{
    MessageBox.Show("Next track");
}


在您的情况下,我想说的可能是NavigationCommands.BrowseForward和NavigationCommands.BrowseBack。签出... http://msdn.microsoft.com/en-us/library/system.windows.input.navigationcommands.aspxhttp://msdn.microsoft.com/en-us/library/system.windows.input.navigationcommands_members.aspx

查看我的博客文章,以获取更多信息和更多代码示例。

http://richardhopton.blogspot.com/2009/08/responding-to-mediapresentation-buttons.html

09-25 18:31