Frage

Hy.

Ich habe eine ListBox mit einem Scroll in ihm. Jedes Element (40 ++ Artikel) der Listbox enthält einen Textblock und ein kleines Bild. Wenn ich die Größe des Fensters ist die Redimensionierung sehr laggy. Wenn ich die TextBlock- Sichtbarkeit der Elemente setzen auf „kollabiert“, ist das Ändern der Größe in Ordnung. Mein erster Ansatz war die Sichtbarkeit der einzelnen Elemente nicht in der Scroll angezeigt auf „kollabiert“, aber ich konnte nicht einen Indikator finden, wenn ein Element für den Benutzer sichtbar ist.

Hat jemand eine Idee, die Größenänderung weniger laggy, vielleicht eine andere Kontrolle statt des Textblockes zu machen? Vielen Dank für Ihre Hilfe.

War es hilfreich?

Lösung 2

Der beste Weg, um die Leistung von Größenanpassung zu verbessern, ist ein VirtualizingStackPanel in Ihrem Scroll zu verwenden. Sie können Ihre List-Box oder im allgemeinen diese in der Datenvorlage von beispielsweise außer Kraft setzen, Sie Itemspanel.

Es ist nicht Elemente machen, die nicht sichtbar sind, im Vergleich zu einem normalen Stackpanel, das alle Artikel die ganze Zeit macht, unabhängig davon, ob sie für den Benutzer sichtbar sind oder nicht.

Funktioniert bei mir ganz gut.

Andere Tipps

Die folgende gibt an, ob das Element an der angegebenen Offset sichtbar ist oder nicht:

public bool IsItemVisible(ListBox listBox, int index)
{
    if (listBox.Items.Count != 0)
    {
        VirtualizingStackPanel vsp = (VirtualizingStackPanel)VisualTreeHelper.GetParent(listBox.ItemContainerGenerator.ContainerFromIndex(0));
        int FirstVisibleItem = (int)vsp.VerticalOffset, VisibleItemCount = (int)vsp.ViewportHeight;
        return index >= FirstVisibleItem && index <= FirstVisibleItem + VisibleItemCount;
    }

    return false;
}

Sie können es wie folgt verwendet werden:

private void Button_Click(object sender, RoutedEventArgs e)
{
    for (int i = listbox1.Items.Count - 1; i >= 0; i--)
        if (!IsItemVisible(listbox1, i))
            ((ListBoxItem)listbox1.Items[i]).Visibility = Visibility.Collapsed;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top