4

スクロールビュー内にキャンバスがあります。スクロールビューにキーダウンイベントハンドラーをアタッチしました。ほとんどのキーでは、ハンドラーが呼び出されます。

ただし、矢印キーの場合、ハンドラーは呼び出されません。代わりに、scrollviewは適切な方向にスクロールされます。

また、スクロールビューにキーアップハンドラーをアタッチしましたが、キーアップは矢印キーに対して呼び出されます。

ここで矢印キーダウンイベントを取得する方法はありますか?

4

4 に答える 4

2

KeyUpイベントを使用するだけです。チャームのように機能します。

于 2012-12-04T16:32:08.880 に答える
1

このばかげたハックを見つけて、それを機能させました。スクロールビューをタブストップに設定しないと、主要なイベントが食べられなくなります。そこで、目に見えないテキストボックスにフォーカスを当てることでそれを修正しました。

scrollView.IsTabStop = false;

invisibleTextBox.Foreground = new SolidColorBrush(Colors.Transparent);
invisibleTextBox.Background = new SolidColorBrush(Colors.Transparent);
Canvas.SetZIndex(invisibleTextBox, -1000);
invisibleTextBox.KeyDown += new KeyEventHandler(HandleKeyDown);
invisibleTextBox.KeyUp += new KeyEventHandler(HandleKeyUp);

編集:テキストボックスをキャンバスから移動する必要がありました。これは、非表示であるにもかかわらず、アウトラインがまだ表示されているためです。

2 番目の編集: KeyDown イベントをキャプチャできることが最初にわかったので、テキスト ボックスを使用しました。ただし、UserControl は可能です。そのため、非表示のテキスト ボックスの代わりに UserControl を使用する方がよいでしょう。必要に応じて、UserControl で Focus() を呼び出すことができます。

于 2008-10-21T20:14:44.017 に答える
0

これは可能な答えです - 私はこれをテストする機会がありませんでした. ただし、コントロールがイベントに到達する前にイベントを消費している場合、過去に同様の問題がありました。あなたが試すことができるかもしれないいくつかのことがあります:

  1. PreviewKeyDown イベントを使用します。それがその名前だと思います。コントロールによって消費される前に、イベントに到達できる場合があります。
  2. mblandfo の提案を試してみてください。ただし、これを行うと、すべてをユーザー コントロールにラップして、コードの残りの部分から自分が行っていることを隠すことになるでしょう。
  3. Canvas オブジェクトにキー ハンドラーを追加すると、そこでイベントをキャッチし、独自のイベントを通じて「バブル」することができる場合があります。

1) を除いて、これらはすべてハックと見なされますが、幸運を祈ります。

于 2008-10-27T01:05:35.903 に答える
-1

「PreviewKeyDown イベントを使用してください。それが呼ばれるものだと思います。コントロールによって消費される前に、イベントに到達できる可能性があります。」

これは機能します。イベント引数を「Handled = true」に設定するだけで、ScrollViewer (または ListBox) は、イベントを処理した後にイベントを取得しません。ただし、ListBox に IsTabStop プロパティを使用する必要はありませんでした。とにかく何もしなかったようです。

于 2009-12-31T16:52:52.290 に答える