(ObservableCollectionがサポートする)CollectionViewSourceにバインドされたリストボックスがあります。バックエンドコレクションにアイテムを追加すると、リストボックスは自動的にそれらをビューにスクロールします。この動作を無効にするにはどうすればよいですか?リストボックスは、新しいコンテンツを追加するときにスクロールします。
<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>
EDIT:これは.NET 4.0、Visual StudioのAddRangeを使用している場合、この現象は発生しません2010であるが、要素は高価であり、私はするためにDispatcher.Invokeを使用して、一度にそれらを1つずつ追加UIの応答性を保つ。
EDIT2:私はVirtualizationStackPanelを使用しない理由は3回提案されているため、「あまりにもハード」を仮想化するためです。私は、私のメソッドを使用するので、すべてのアイテムが一度作成され、UIが応答するので、通常のスタックパネルよりも多くの作業を実行することがわかります。仮想化パネルでは、新しいアイテムがスクロールして表示されるとロックされ、一時停止するともう少し作成されます。さらに、ロードされていないアイテムが正しくイベントを受け取らないという問題があり、あまりにもスクロールしすぎると、以前のアイテムは破棄されてしまい、後で作成されるように強制されます。 スタックパネルを使用して、初期ロード時間を除いて、これらの問題をすべて回避しています。
使用しているフレームワークのバージョンは何ですか?私はこれをVS2008/framework 3.5に入れましたが、それはどのような種類のスクロールも表示されませんでした。 – RQDQ
「ObservableCollection」に直接バインドしようとしましたが、アイテムが追加されたときにスクロールしませんでした。 (また、私は 'VirtualizingStackPanel'を通常のものの代わりに使用します) –
WPFの知識がちょっと薄いので、暗闇の中で撮影してください:ItemsPanelTemplateのVirtualizingStackPanelでなければならないのですか?複数の項目を追加するためのUI更新の問題にも役立ちます。 – Tergiver