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

5vf7fwbs  于 2023-05-13  发布在  其他
关注(0)|答案(3)|浏览(151)

我计划在我的WPF应用程序中添加对许多键盘上的后退和前进按钮的支持,但我很难让它们工作。
我试过使用标准的键绑定到BrowserBack和BrowserForward,没有乐趣。我用ESC键测试了代码,以确保它在原则上是工作的,那个键很好。
Nextup我处理了KeyUp事件,但是发送的密钥是“System”,这是无用的,如果我使用KeyInterop.VirtualKeyFromKey,我只会返回0。
我开始认为PInvoke/trapping真实的的窗口消息将是唯一的选择,但我宁愿避免,如果有人有任何好主意?
哦,键本身肯定能用,我的键盘也插上了;- )

更新:他们建议使用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));

这似乎是一种治疗。flicks也是!

rwqw0loc

rwqw0loc1#

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

2cmtqfgy

2cmtqfgy2#

在PreviewKeyUp事件中,您应该能够执行此操作-

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

u59ebvdq3#

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

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

当我按下键盘上的前进键时,它会粘贴。
有没有可能是其他什么东西拦截了按键?

相关问题