В настоящее время я работаю над своим первым проектом WPF и пытается сделать прокручиваемый список. Сначала я думал, что это можно легко сделать, просто ограничив ширину и высоту списка и, таким образом, заставляя полосу прокрутки появляться автоматически всякий раз, когда содержимое превышает его пространство. Сначала это выглядело отлично, но из-за обработанного PreviewMouseDown-Event (который позволяет перетаскивать элементы списка) он не работает после выбора элемента.
Вторая попытка (с помощью ScrollViewer)
<ScrollViewer>
<ListView ItemsSource="{Binding FileViewModels}"
PreviewMouseDown="ListView_MouseMove"
Height="450" Width="200"/>
</ScrollViewer>
Конечно, это привело к появлению второй полосы прокрутки всякий раз, когда содержимое списка стало больше его максимальной высоты. И перетаскивание панели по-прежнему не работает после выбора элемента.
Третья (довольно глупая) попытка (отключение дублирования прокрутки)
<ScrollViewer>
<ListView ItemsSource="{Binding FileViewModels}"
PreviewMouseDown="ListView_MouseMove"
Height="450" Width="200"
ScrollViewer.VerticalScrollBarVisibility="Disabled"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"/>
</ScrollViewer>
Это удалило дубликат полосы прокрутки и включило прокрутку с помощью колеса мыши, но отключила полосу прокрутки, поэтому вы не могли двигаться, щелкнув и перетащив ее.
Четвертая попытка (постоянный размер ScrollViewer)
<ScrollViewer Height="450" Width="200">
<ListView ItemsSource="{Binding FileViewModels}"
PreviewMouseDown="ListView_MouseMove"/>
</ScrollViewer>
Удалено ограничение ширины / высоты из списка ListView и перенесено в ScrollViewer. Это позволяет использовать полосу прокрутки и удаляет дубликат. К сожалению, колесико мыши больше не работает (перетаскивание полосы прокрутки отлично работает).
Может кто-нибудь, пожалуйста, объясните мне, почему колесо мыши больше не работает и как это исправить?
Редактировать Может быть, мне стоит вернуться к моему первому решению. Очевидно, что в шаблоне ListView уже есть ScrollViewer. Остальная проблема заключалась бы в том, что я не могу перетащить полосу прокрутки после выбора элемента из-за обработанного события PreviewMouseDown (в этом случае все еще работает прокрутка через колесико мыши). Должен ли я обрабатывать перетаскивание элементов по-разному (это сработало для меня, прежде чем вы захотите добавить панель прокрутки)? Или есть способ определить, находится ли курсор над полосой прокрутки (так что я мог бы отменить выбор элемента, который позволяет прокручивать)? Или есть другие предложения?