2011-01-02 3 views
1

ListBoxのすべてのアイテムに対して、自分のDataTemplateとして使用しているユーザーコントロールがあります。簡単な - それはちょうど特定のListBoxを展開し、それが動作するように、UserControlでアニメーションがあります。つまり、スクロールすると、N番目のアイテムすべてにListBoxが展開されます.Nはブラウザのサイズに応じて決まります(つまり、ListBoxが保持しているアイテムの数が決まります)。ListBoxでのSilverlightのアニメーションコントロール

私がスクロールするときに、新しいアイテムがリストボックスにロードされているように見えるのは、このアニメーションを上回っているようです。私はこれについて何かできることはありますか?

+0

コードを投稿できますか?それは助けるだろう。 – ChrisF

答えて

2

あなたの外側のListBoxにのみいくつかの項目が含まれている場合、そのXAMLにこれを追加します - デフォルトで

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

をListBoxのは、現在表示されているListBoxItemの具体的なインスタンスを含むVirtualizingStackPanelを使用しています。アイテムは、既存のアイテムをリサイクルするItemContainerGeneratorによって必要に応じて生成されます。私はそこにいくつかあると思うが、ListBoxItemの状態は、ItemsSourceから別のアイテムを表示するために再利用されたときに完全にはクリアされません。

+0

Ha - これは*恐ろしい*パフォーマンスをもたらします。私がやったことは、ViewModelにアニメーションの状態を保存してから、コントロールがロードされたときにそれを確認し、それに応じて調整することでした。最もクリーンなコードではありませんが、動作します。いつものようにありがとう。 –

+0

@Adam:この解決策は、リストに「少数のアイテム」がある場合のみです。他のアプローチはViewModelに州を置くことになると私は同意するだろうが、これはもっともクリーンではないと私は同意するだろう、と私は思う。 __view__モデルの目的は、__view__の特定のロジックとステートを視覚的なプレゼンテーション自体から分離したテスト可能なクラスに維持することです。 – AnthonyWJones

関連する問題