У меня есть список, который связан с CollectionViewSource (поддерживается ObservableCollection).Когда я добавляю элементы в свою внутреннюю коллекцию, список автоматически прокручивает их в поле зрения.Как отключить это поведение?
<ListBox ItemsSource="{Binding}"
ScrollViewer.VerticalScrollBarVisibility="Hidden"
ScrollViewer.HorizontalScrollBarVisibility="Visible"
HorizontalContentAlignment="Center"
VerticalContentAlignment="Stretch">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" Margin="0"
CanVerticallyScroll="False"
CanHorizontallyScroll="True"
/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
РЕДАКТИРОВАТЬ: это с .NET 4.0, Visual Studio 2010. Такое поведение не происходит при использовании AddRange, но элементы стоят дорого, поэтому я добавляю их по одномувремя использования Dispatcher.Invoke для обеспечения отзывчивости интерфейса.
EDIT2: поскольку он был предложен три раза, я не использую VirtualizingStackPanel, потому что он виртуализируется «слишком сложно».Я считаю, что он выполняет больше работы, чем обычная панель стека, потому что, используя мой метод, все элементы создаются один раз, и пользовательский интерфейс отзывчивый.С панелью виртуализации приложение блокируется, когда новые элементы прокручиваются в поле зрения, и приостанавливается, чтобы создать еще несколько.Кроме того, существуют проблемы с элементами, которые не загружены и не получают события должным образом, и, если прокрутить слишком далеко, более ранние элементы, по-видимому, будут отброшены и будут созданы позднее.Поэтому я использую панель стека, где я избегаю всех этих проблем, за исключением начального времени загрузки, которое мне почти удалось преодолеть, сохранив этот вопрос.