我有一個綁定到CollectionViewSource(由ObservableCollection支持)的列表框。當我將項目添加到我的後端集合時,列表框會自動將它們滾動到視圖中。我如何禁用此行爲?當添加新內容時ListBox滾動到結束
<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爲了增加逐一時間保持UI的響應。
編輯2:因爲它已被提出三次,我不使用VirtualizingStackPanel的原因是因爲它虛擬化「太難」。我發現它比常規的堆棧面板執行更多的工作,因爲使用我的方法,所有項目都創建一次,並且UI是響應式的。使用虛擬化面板時,當新項目滾動到視圖中時,應用程序會鎖定,因爲它會暫停創建更多項目。此外,沒有加載的項目沒有正確地接收事件,並且如果滾動得太遠,則早期的項目似乎被丟棄並且被迫在稍後被創建。 所以我使用堆棧面板,除了初始加載時間之外,我避免了所有這些問題,除了這個問題之外,我幾乎可以克服這些問題。
你使用的是什麼版本的框架?我只是把它放在VS2008/framework 3.5中,它沒有做任何滾動查看。 – RQDQ 2011-01-31 18:44:15