2016-06-24 5 views
0

OPがWindows用のショートカットを再定義することを話していると思われたので、私はthis questionを再請求しています。私は自分のアプリケーションのためにそれをしたい。他の同様の質問がいくつか存在しますが、すべての答えがその点を見逃しているようです。C#でWindowsのデフォルトキーボードショートカットを再割り当てしますか?

C#/ WPFアプリケーションで「スペース」へのキーボードショートカットを割り当て、「一時停止/続行」ボタンとペアリングしようとしています。私は現在、this answerに似たRoutedCommandを使用しようとしています。しかし、「スペース」は、Windowsで最後にクリックされたボタンを再度クリックするデフォルトのショートカット(またはおそらくC#)のようです。あなたがプッシュした最後のボタンがショートカットを割り当てようとしている場合、これは素晴らしいことです!しかしそれほど偉大ではない。

「スペース」のデフォルト使用を削除してボタンで予約するにはどうすればよいですか?

+2

グローバルな 'PreviewKeyDown'ハンドラを作成しようとしましたが、スペースキーが押された場合にデフォルトイベント(' e.Cancel = true')を取り消しましたか? –

+0

ユーザインタフェースの最も重要な品質は、それが発見可能で予測可能であることです。ボタンのTextプロパティを「Pause」または「Continue」に変更してください。マニュアルを書いたり、コードを書くことなく、すべての人が意味をなさないようになります。 –

答えて

2

KeyDownイベントにフォーカスがある場合は通常のButtonがキャプチャされるため、最上位レベルのPreviewKeyDownイベントを聞くのが最善の方法です。イベントハンドラーでスペースキーを探すと、これをPause/Continueにリダイレクトして、eventargsをキャンセルし、KeyDownイベントに現在フォーカスされているボタンに伝播しないようにします。

+0

これは完全には機能しませんでしたが、そこには90%の道があります。私はトップレベルのリダイレクトを避けることを望んでいました。静的なRoutingCommandを使用して動作させることはほとんど成功しませんでしたが、ViewModelLocatorからViewModelを解決した場合、再生/一時停止機能に直接アクセスすることができました。 – metao

関連する問題