4

多くのキーボードにある [戻る] ボタンと [進む] ボタンのサポートを WPF アプリに追加することを計画していましたが、それらを機能させるのに苦労しています。

BrowserBack と BrowserForward に標準の KeyBinding を使用してみましたが、うまくいきません。ESC キーを使用してコードをテストし、それが原則として機能していることを確認しました。そのキーは問題ありませんでした。

次に 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.aspxおよびhttp://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

言いたくないのですが、これは私にとってはうまくいきました:

<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 に答える
1

PreviewKeyUp イベントでは、これを行うことができるはずです -

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