В WPF ListBox с более чем 1000 элементов изображений, масштабирование изображений замедляется

Я столкнулся с проблемой при разработке приложения для просмотра фотографий. Я использую ListBox для показа изображений, которые содержатся в ObservableCollection. Я связываю ItemsSource ListBox с ObservableCollection.

  <DataTemplate DataType="{x:Type modeldata:ImageInfo}">
        <Image 
            Margin="6"
            Source="{Binding Thumbnail}"
            Width="{Binding ZoomBarWidth.Width, Source={StaticResource zoombarmanager}}"
            Height="{Binding ZoomBarWidth.Width, Source={StaticResource zoombarmanager}}"/>
  </DataTemplate>

<Grid DataContext="{StaticResource imageinfolder}">
    <ScrollViewer
        VerticalScrollBarVisibility="Auto" 
        HorizontalScrollBarVisibility="Disabled">
        <ListBox Name="PhotosListBox"
            IsSynchronizedWithCurrentItem="True"
            Style="{StaticResource PhotoListBoxStyle}" 
            Margin="5"
            SelectionMode="Extended" 
            ItemsSource="{Binding}" 
           />
    </ScrollViewer>

Я также связываю высоту изображения в ListBox с помощью ползунка (значение ползунка также привязывается к zoombarmanager.ZoomBarWidth.Width). Но я обнаружил, что если коллекция станет больше, например: содержит более 1000 изображений, если я использую ползунок для изменения размера iamges, он станет немного медленнее. Мой вопрос 1. Почему стало медленно? он пытается увеличить каждое изображение или просто потому, что notify ("Width") вызывается более 1000 раз. 2. Есть ли способ решить эту проблему и сделать это быстрее.

PhotoListBoxStyle выглядит так:

    <Style~~ TargetType="{x:Type ListBox}" x:Key="PhotoListBoxStyle">
        <Setter Property="Foreground" Value="White" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ListBox}" >
                    <WrapPanel 
                        Margin="5" 
                        IsItemsHost="True" 
                        Orientation="Horizontal" 
                        VerticalAlignment="Top"                             
                        HorizontalAlignment="Stretch" />
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style~~>

Но если я использую стиль выше, я должен использовать ScrollViewer за пределами ListBox, в противном случае я понятия не имею, как получить плавную полосу прокрутки прокрутки, и кажется, что оболочка не имеет полосы прокрутки по умолчанию. Кто-нибудь поможет? Говорят, что список с scrollviewer имеет низкую производительность.

Ответы на вопрос(6)

Ваш ответ на вопрос