Dans WPF zone de liste avec plus de 1000 Images, le Zoom des Images est lent

J'ai rencontré un problème lors de deveoping une photo d'application de l'observateur.
J'ai utiliser la liste pour Afficher les Images, qui est contenue dans une ObservableCollection.
Je lier la zone de liste de ItemsSource de l'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>

J'ai aussi lier l'Image'height dans ListBox avec un curseur.(la Valeur du curseur également se lier à zoombarmanager.ZoomBarWidth.La largeur).
Mais j'ai découvert que si la collecte deviennent plus grands, tels que: contient plus de 1000 images, Si j'utilise le curseur pour modifier la taille des iamges, il est devenu un peu lent.
Ma Question est la.
1. Pourquoi est-il devenu Lent? devenir il essaie de zoom de toutes les images,ou c'est juste parce que notify("Largeur") est invoquée plus de 1000 fois.
2. Existe t'il une méthode pour résoudre ce genre de problème et de le rendre plus rapide.

La PhotoListBoxStyle est comme ceci:

    <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~~>

Mais Si j'utilise le Style ci-dessus, je dois utiliser ScrollViewer en dehors de zone de liste, sinon je n'ai aucune idée de comment faire pour obtenir une surface lisse de défilement scrollerbar et le wrappanel semble avoir aucun défaut scrollerbar. Aider quelqu'un? Il est dit listbox avec scrollviewer a de mauvaises performances.

  • La liaison de chaque image en Hauteur et en Largeur, c'est horriblement inefficace, il suffit d'utiliser un LayoutTransform sur le ItemsPanel (ajouté en réponse à cette effet).
InformationsquelleAutor user25749 | 2008-10-08