WPF Renderleistung
-
06-07-2019 - |
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 CheckBox
es 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 CheckBox
es erscheinen.
Alle Gedanken?
Danke
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.
-
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.
-
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.
-
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.