В WPF ListView как я могу предотвратить автоматическую прокрутку?

У меня есть список WPF ListView, который в настоящее время прокручивается каждый раз, когда я нажимаю на элемент, который виден лишь частично. Как я могу запретить элементу управления прокручивать этот элемент в поле зрения (вместо того, чтобы просто выбирать частично видимый элемент)? Такое поведение очень раздражает при перетаскивании из этого элемента управления.

Спасибо.

Добавлено: я ищу решение, позволяющее предотвратить прокрутку самого элемента управления при нажатии на содержимое, которое, по мнению элемента управления, не полностью видно. Часто это на несколько пикселей и прокрутка не нужна.


person Wes Keene    schedule 16.10.2008    source источник


Ответы (3)


Элементы прокручиваются в поле зрения, потому что поведение по умолчанию при щелчке элемента списка заключается в вызове функции BringIntoView(). Вы можете добавить обработчик события RequestBringIntoView и перехватывать его до того, как оно перейдет из ListViewItems в ScrollViewer. В своем обработчике проверьте границы отправителя относительно видимой области, и если вы решите, что вам не нужно прокручивать, установите для флага события Handled значение true.

person brian sharon    schedule 17.10.2008
comment
Чтобы уточнить, используйте событие PreviewMouseDown, чтобы проглотить его. - person Bob King; 17.10.2008

Поскольку я сейчас в дороге, я не могу попробовать это, но пробовали ли вы поиграть с CanContentScroll и/или обернуть прокручиваемый контент в панель, как это предлагается Обзор ScrollViewer в MSDN?

В худшем случае вы можете заменить ListView. ">ItemsPanel с помощью взломанного ScrollViewer с "нечетким" фактором, например захватив событие RequestBringIntoView.

person David Schmitt    schedule 20.10.2008

Вы пробовали этот подход?

просто как дополнение, я не знаю, насколько вы разбираетесь в теме, но здесь хорошее место, чтобы узнать больше об этом.

добавлен:

Я только что обнаружил, что вы можете предотвратить использование колесика мыши. прокрутки.

person balexandre    schedule 16.10.2008