响应WPF中的“后退”和“前进”按钮

时间:2010-02-05 08:50:39

标签: wpf keyboard back key-bindings next

我计划在我的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));

这似乎也是一种享受......也轻弹了!

3 个答案:

答案 0 :(得分:5)

您引用的按钮在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

答案 1 :(得分:1)

在PreviewKeyUp事件中,你应该可以这样做 -

private void Window_PreviewKeyUp(object sender, KeyEventArgs e){
  if (e.SystemKey == Key.BrowserBack)
    // Do something ...

答案 2 :(得分:1)

我不想这么说但这对我来说很好:

<RichTextBox>   
       <RichTextBox.InputBindings>
           <KeyBinding Key="BrowserForward" Command="Paste"/>
       </RichTextBox.InputBindings>
       <FlowDocument>
            <Paragraph>
                Some text here to cut and paste...
                            </Paragraph>
            </FlowDocument>
        </RichTextBox>

当我按下键盘上的Forward键时,它会粘贴。

是否有可能其他东西正在拦截按键?