私は現在、最初の WPF プロジェクトに取り組んでおり、ListView
スクロール可能にしようとしています。ListView
最初は、の幅と高さを制限して、コンテンツがそのスペースを超えるたびにスクロールバーが自動的に表示されるようにするだけで、これを簡単に実行できると思いました。これは最初は問題ないように見えましたが、処理されたPreviewMouseDown
イベント (リストの項目をドラッグできるようにする) が原因で、項目を選択した後は機能しません。
2 回目の試行( を使用ScrollViewer
)
<ScrollViewer>
<ListView ItemsSource="{Binding FileViewModels}"
PreviewMouseDown="ListView_MouseMove"
Height="450" Width="200"/>
</ScrollViewer>
もちろん、これにより、リストのコンテンツが最大の高さよりも大きくなるたびに、2 つ目のスクロールバーが表示されました。また、アイテムを選択した後も、バーをドラッグしても機能しませんでした。
3 回目の(かなりばかげた)試行(スクロールバーの複製を無効にする)
<ScrollViewer>
<ListView ItemsSource="{Binding FileViewModels}"
PreviewMouseDown="ListView_MouseMove"
Height="450" Width="200"
ScrollViewer.VerticalScrollBarVisibility="Disabled"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"/>
</ScrollViewer>
これにより、スクロールバーの重複が削除され、マウスホイールによるスクロールが有効になりましたが、スクロールバーが無効になったため、クリックしてドラッグしても移動できませんでした。
4 回目の試行(の定数サイズScrollViewer
)
<ScrollViewer Height="450" Width="200">
<ListView ItemsSource="{Binding FileViewModels}"
PreviewMouseDown="ListView_MouseMove"/>
</ScrollViewer>
から幅/高さの制約を削除し、ListView
に移動しましたScrollViewer
。これにより、スクロールバーが有効になり、重複が削除されます。残念ながら、マウス ホイールはもう機能しません (スクロール バーのドラッグは正常に機能します)。
マウスホイールが機能しなくなった理由と、これを修正する方法を誰かに説明してもらえますか?
編集 たぶん、最初の解決策に戻る必要があります。
明らかに、ListView
のテンプレートには既にScrollViewer
. 残りの問題は、処理されたイベントのために項目を選択した後にスクロールバーをドラッグできないことですPreviewMouseDown
(その場合、MouseWheel によるスクロールは引き続き機能します)。アイテムのドラッグを別の方法で処理する必要がありますか (スクロールバーを追加する前に、私にとってはうまくいきました)? または、カーソルがスクロールバーの上にあるかどうかを検出する方法はありますか (そのため、スクロールを有効にするアイテムの選択を解除できます)。それとも他の提案はありますか?