Frage

Ich habe eine WPF Benutzersteuerung, die an einem DataTable bindet und erzeugt CheckBox und ein maskiertes EditBox für jede Zeile in einem DataTable. Ich habe mehrere Instanzen dieser Kontrolle auf meiner Form. Die Gesamtzahl der CheckBoxes erzeugt werden soll, über 200. ich einige Rendering-Performance-Probleme sehe. Die Form Lasten mit all den statischen Kontrollen (Textfelder, Drop-Downs) sofort, dann einige Sekunden später die CheckBoxes erscheinen.

Alle Gedanken?

Danke

War es hilfreich?

Lösung

Es sei denn, die alle 200 Elemente auf dem Bildschirm sichtbar sind, sollten Sie eine Art virtuellen Layout verwenden, der die visuelle Struktur nur für die sichtbaren Elemente erzeugt. Dies wird erheblich die Leistung verbessern.

Andere Tipps

Was ist „Erzeugen“ die Kontrollkästchen? Sie sollten eine Itemscontrol (oder Unterklasse) und Binden der Daten verwenden, der die Kontrollkästchen, um es darstellt. Vorausgesetzt, dass Sie das tun, dann ist das bekommen, was Sie wollen, dass Itemscontrol zu verwenden „virtualisieren“ durch die VirtualizingStackPanel.IsVirtualizing Eigenschaft Anwendung auf die Items etwa so:

<ItemsControl VirtualizingStackPanel.IsVirtualizing="true" ... >

Sie können auch auf „Container Recycling“ machen wollen, die auch Leistung helfen. Dies ist auch mit einer angefügten Eigenschaft getan:

<ItemsControl VirtualizingStackPanel.VirtualizationMode="Recycling" ... >

Zu viele Kontrollkästchen sicherlich eine Menge Geld kosten, wenn man sich Vorlagen von grundlegenden Kontrollen aussehen, sie sind auch mit vielen UIElements gefüllt.

Ich würde vorschlagen, wenn Sie Ihre UI in Tabs oder Accordins teilen können, die weniger sichtbare Elemente auf einem Bildschirm verursachen werden, sowie es auf Dinge leichter und schneller als auch navigieren helfen.

VirtualizingStackPanel helfen, aber wenn Ihr zu korrigieren Bindung ist nicht es zu unvorhergesehenen Ergebnissen führen kann.

  1. Custom Control Template: Sie können auch eigene Kontrollkästchen Vorlage mit mindestens UIElements, wie einfaches Rechteck gefüllt mit unterschiedlichen Farben auf IsChecked Eigenschaft Trigger erstellen. Dies wird beseitigen einige Animationen usw., die sicherlich Ihre Rendering-Leistung imporve kann. Ich glaube, CheckBox ist am wenigsten wichtig, wenn es darum geht, UI zu animieren.

  2. Wenn Sie sicher sind, dass Sie „Text“ als Inhalt, dann erstellen Sie einfach Vorlage mit Rechteck / leeren Wert zu zeigen, gefüllt werden mit und setzen TextBlock- mit Vorlage Inhalt zu binden.

  3. Versuchen feste Breite / Höhe zu Ihrem Kontrollkästchen zu geben, wenn Sie die Höhe / Breite der Steuerelemente / Container zu beheben, wird es für Layout-Manager eaiser sie zu machen, eher dann hält auf der Berechnung und Elemente anzupassen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top