Me encontré con un problema al desarrollar una aplicación de visor de fotos. Uso ListBox para mostrar imágenes, que está contenido en un ObservableCollection. Adjunto ItemsSource de ListBox a ObservableCollection.En un ListBox de WPF con más de 1000 elementos de imagen, las imágenes de zoom se vuelven lentas
<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>
también obligar a la Image'height en ListBox con un control deslizante. (El valor del deslizador también se unen a zoombarmanager.ZoomBarWidth.Width). Pero encontré si la colección se vuelve más grande, como: contiene más de 1000 imágenes, si uso el control deslizante para cambiar el tamaño de iamges, se vuelve un poco lento. Mi pregunta es. 1. ¿Por qué se vuelve lento? se convierte en que intenta hacer zoom en cada imagen, o simplemente porque se invoca notify ("Ancho") más de 1000 veces. 2. ¿Hay algún método para resolver este tipo de problema y hacerlo más rápido?
El PhotoListBoxStyle es así:
<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~~>
Pero Si utilizo el estilo anterior, tengo que usar ScrollViewer fuera de cuadro de lista, de lo contrario no tengo idea de cómo conseguir un scrollerbar desplazamiento suave y el WrapPanel parece tener sin barra de desplazamiento predeterminada. ¿Alguien ayuda? Se dice que el cuadro de lista con scrollviewer tiene un bajo rendimiento.
Binding altura de cada imagen/anchura es terriblemente ineficiente, sólo tiene que utilizar un LayoutTransform en el ItemsPanel (respuesta agregado a este efecto) . – user7116