Cómo: Mejorar el rendimiento del desplazamiento de un control ListBox

Si ListBox contiene muchos elementos, la respuesta de la interfaz de usuario puede ser lenta cuando un usuario desplaza el control ListBox mediante la rueda del mouse o arrastrando el control de posición de una barra de desplazamiento. Puede mejorar el rendimiento de ListBox cuando el usuario se desplaza estableciendo la propiedad adjunta VirtualizingStackPanel.VirtualizationMode en VirtualizationMode.Recycling.

Ejemplo

Descripción

En el ejemplo siguiente se crea ListBox y se establece la propiedad adjunta VirtualizingStackPanel.VirtualizationMode en VirtualizationMode.Recycling para mejorar el rendimiento durante el desplazamiento.

Código

<StackPanel>

  <StackPanel.Resources>
    <src:LotsOfItems x:Key="data"/>
  </StackPanel.Resources>

  <ListBox Height="150" ItemsSource="{StaticResource data}" 
             VirtualizingStackPanel.VirtualizationMode="Recycling" />

</StackPanel>

En el ejemplo siguiente se muestran los datos que usa el ejemplo anterior.

public class LotsOfItems : ObservableCollection<String>
{
    public LotsOfItems()
    {
        for (int i = 0; i < 1000; ++i)
        {
            Add("item " + i.ToString());
        }
    }
}
Public Class LotsOfItems
    Inherits ObservableCollection(Of String)
    Public Sub New()
        For i As Integer = 0 To 999
            Add("item " & i.ToString())
        Next
    End Sub
End Class