1

チャイルドビューを含むスクロールビューアーがあります。そのチャイルドビューのいずれかにフォーカスがあり、下/上キーを押すと、コンテンツが下/上にスクロールします。

矢印キーに基づくナビゲーションシステムを実装していなければ、これは問題にはなりません。したがって、これらの4つの矢印キーを使用して、オブジェクト間をより簡単にナビゲートします。問題は、ユーザーが上または下を押すとコンテンツがスクロールすることです。スクロール動作を無効にしたい。

私はすでにいくつかのことを試しました:

  • KeyDownイベントをscrollviewerに追加しますが、ヒットすることはありません。
  • scrollviewerでistabstopをfalseに設定する
  • スクロールビューア内のグリッドでkeyeventargs"handled"をtrueに設定すると、コードが実行される(ナビゲーション)前に呼び出されるため、これも使用できません。

編集

XAMLでのイベントの処理方法は次のとおりです。

<i:Interaction.Behaviors>
    <catel:KeyPressToCommand Command="{Binding CancelCellInputCommand}" Key="Escape" />
    <catel:KeyPressToCommand Command="{Binding LeftArrowNavigationCommand}" Key="Left"/>
    <catel:KeyPressToCommand Command="{Binding UpArrowNavigationCommand}" Key="Up"/>
    <catel:KeyPressToCommand Command="{Binding RightArrowNavigationCommand}" Key="Right"/>
    <catel:KeyPressToCommand Command="{Binding DownArrowNavigationCommand}" Key="Down"/>
</i:Interaction.Behaviors>

コンテンツがキーを上下にスクロールしないようにする他の解決策はありますか?

編集2:

さらに調査したところ、箇条書き1がそのように機能する理由は、scrollviewerがキーダウンイベントを食べて、おそらくスクロールを発生させるためであることがわかりました。しかし、私はまだそれを回避する方法を見つけていません。「IsTabStop」をfalseに設定したと言う人もいますが、それでもまったく違いはありません。KeyUpをキャッチすることはできますが、キーのスクロールを防ぐには遅すぎます。私の最後の手段は、私が望むものに上/下キーを使用しないことですが、セルグリッドで上下に移動するには、上/下キーが必要です。これは単なるロジックです。

私はこの問題に本当に固執しているので、これについての助けと考えをいただければ幸いです。

4

2 に答える 2

2

キーが押されたトンネリングイベントPreviewKeyDownを処理する場合は、イベントのOriginalSourceを取得してから、ScrollViewerとなる視覚的な祖先を見つけてみてください。ScrollViewerの祖先が見つからない場合は、すでに行っているようにキーを処理します。見つかった場合は、何もしません。

于 2012-07-26T13:34:53.863 に答える
0

ついにSilverlightフォーラムで何かを見つけました。

結局のところ、これはVincent Pielsソリューションに似ており、PreviewKeyDownイベントを使用しますが、XAMLで使用するイベントにはカスタムの子(contentcontrol)が必要でした。

于 2012-07-30T13:18:08.160 に答える