2011-01-02 16 views
1

Ich habe ein Benutzersteuerelement, das ich als meine DataTemplate für alle Elemente in meiner ListBox verwende. Es gibt eine Animation in besagtem UserControl, die ziemlich einfach ist - sie erweitert nur eine bestimmte ListBox und sie funktioniert. Die Sache ist, wenn ich scrollte, jedes Nth Item ALSO hat die ListBox erweitert, wobei N davon abhängt, wie groß mein Browser ist (mit anderen Worten, wie viele Elemente die ListBox gleichzeitig hält).Silverlight Animationssteuerung in ListBox

Es sieht so aus, als würden neue Objekte, die beim Scrollen in die Listbox geladen werden, über diese Animation stolpern. Kann ich irgendetwas dagegen tun?

+0

Können Sie Ihren Code veröffentlichen. Es würde helfen. – ChrisF

Antwort

2

Wenn Ihre äußere ListBox nur wenige Elemente enthält, dann ist dieser Artikel auf seiner XAML: -

<ListBox.ItemsPanel> 
    <ItemsPanelTemplate> 
     <StackPanel /> 
    </ItesmPanelTemplate> 
</ListBox.ItemsPanel> 

verwendet standardmäßig die ListBox eine VirtualizingStackPanel die einzige konkrete Fälle von ListBoxItem enthält, die aktuell angezeigt werden. Artikel, die nach Bedarf von einem ItemContainerGenerator erzeugt werden, der vorhandene Artikel recycelt. Ich vermute, dass dort der Zustand eines ListBoxItem nicht vollständig gelöscht wird, wenn ein anderer Artikel aus der ItemsSource erneut angezeigt wird.

+0

Ha - das ergibt * schreckliche * Leistung. Am Ende habe ich lediglich den Status der Animation in meinem ViewModel gespeichert, dann überprüft, wann das Steuerelement geladen ist, und die Einstellungen entsprechend angepasst. Nicht der sauberste Code, aber es funktioniert. Danke, wie immer. –

+0

@Adam: Diese Lösung ist nur für, wenn es "wenige Elemente" in der Liste gibt. Ich würde zustimmen, dass der andere Ansatz darin bestünde, den ViewModel zu platzieren, aber ich würde nicht zustimmen, dass dies nicht der sauberste ist, denke ich. Ich würde es nur vorschlagen, wenn Sie bereits ein Viewmodel verwenden, der eigentliche Zweck eines __view__ Modells besteht jedoch darin, __view__ spezifische Logik und Status in einer testbaren Klasse beizubehalten, die von der visuellen Präsentation selbst getrennt ist. – AnthonyWJones

Verwandte Themen