Ответ 1
Да, поведение по умолчанию ListBox (вернее, ScrollViewer внутри шаблона ListBox по умолчанию) странно - когда я впервые встретил его, я подумал, что это должна быть практическая шутка. На самом деле, действительно сложно найти документацию об этом, но кратко упоминается здесь:
Событие ManipulationBoundaryFeedback позволяет приложениям или компонентам обеспечивать визуальную обратную связь, когда объект попадает на границу. Например, класс Window обрабатывает событие ManipulationBoundaryFeedback, чтобы вызвать небольшое перемещение окна, когда встречается его край.
Итак, путь вокруг него - обработать ManipulationBoundaryFeedback в ListBox и установить Handled на true:
<ListBox ManipulationBoundaryFeedback="OnManipulationBoundaryFeedback">
// ...
</ListBox>
Code-за:
private void OnManipulationBoundaryFeedback(object sender, ManipulationBoundaryFeedbackEventArgs e)
{
e.Handled = true;
}