4

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

这似乎是一种享受……也可以轻弹!

4

3 回答 3

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

于 2010-02-05T10:24:33.533 回答
1

在 PreviewKeyUp 事件中,您应该能够做到这一点 -

private void Window_PreviewKeyUp(object sender, KeyEventArgs e){
  if (e.SystemKey == Key.BrowserBack)
    // Do something ...
于 2010-02-05T09:44:11.200 回答
1

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

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

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

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

于 2010-02-05T09:50:18.307 回答