Verzögertes Laden von XAML

Ein Projekt, an dem ich arbeite, hat ein ziemlich komplexes XAML, das die visuelle Leistung merklich beeinträchtigt. Nicht wenige Steuerelemente sind für den Anfangszustand reduziert. Da ihre XAML jedoch analysiert und visuelle / logische Bäume erstellt werden, ist es sehr langsam, zu zeigen, was einem fast leeren Objekt entspricht.

Es sieht so aus (und möchte hier bestätigt werden), dass die Verwendung eines ContentControls mit dem Ausgangszustand Reduziert und anschließender Einbettung des gewünschten Steuerelements als DataTemplate für dieses ContentControl das Laden des gewünschten Steuerelements in das DataTemplate verzögert, bis das ContentControl sichtbar gemacht wird .

Ich habe ein generisches DeferredContentControl erstellt, das das LayoutUpdated-Ereignis des Haupt-UI-Steuerelements überwacht (im Allgemeinen unabhängig davon, welches Element ich schnell anzeigen möchte), und als das erste LayoutUpdated-Ereignis dieses UIElements ausgelöst wurde, habe ich den Dispatcher für verwendet Klappen Sie die Sichtbarkeit des DeferredContentControl auf true, wodurch das Steuerelement im DataTemplate des DeferredContentControl instanziiert wird. Bis der Benutzer auf die anfängliche Ansicht des Bildschirms reagiert hat (die jetzt schnell ist), ist das Steuerelement "Langsam zu laden" (aber immer noch ausgeblendet) in der Datenvorlage bereit.

Scheint dies ein vernünftiger Ansatz zu sein? irgendwelche Fallstricke? Es scheint gut zu funktionieren, wenn es sowohl für Silverlight als auch für WPF getestet wird, und obwohl es die Dinge nicht schneller macht, vermittelt es die Wahrnehmung, dass es in meinem speziellen Szenario bis zu 50% schneller ist.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage