2011-12-13 16 views
3

ListBoxと1000個の非常に短い文字列で簡単なアプリケーションを作成しました。 (明示的になし、ItemTemplate)。 もし私がそれを本当に高速にスクロールすると、ブラックホールが発生します(CPU cantは速いと思います)。Windows Phone Mangoリストボックススクロール

私がItemsControlScrollViewerに使用すると、すべてがOKです。

なぜですか?どういうわけかListBoxでスクロール速度を遅くすることはできますか? 画面に黒い穴が表示されると、ユーザーは本当に混乱することがあります。

更新:デバイス(HTC HD7 7.10.7740)で再生します。私はItemSource

リプロプロジェクトを経由してデータバインディングを使用します(!)https://www.dropbox.com/s/lgcod878srnctp0/SLTK_LLS_TEST.zip

リプロビデオ:https://www.dropbox.com/s/t25dguq0vaa88o9/WP_20111213_113729Z.mp4

+0

は、xamlにバインドまたは追加された文字列ですか? –

+0

エミュレータでテストしているときに私に鳴ります。あなたが経験していることは、ソフトウェアテクニカルの問題ではありません。私たちはあなたに答えを与えることはできません。 –

+0

私はデバイスでテストします(そして、すべてのパフォーマンス関連のことはデバイスでテストする必要があります)。そのような結論を書く前に自分自身で問題を再現しようと試みた方が良いでしょう。 – Grigory

答えて

4

ListBoxは、「仮想化を持っている(それはあなたがが、話をしているよりも多くの複雑なレイアウトのために意図されていたので、メリットは無視できます)デフォルトで有効になっています(ちょうどUIコンテナ仮想化の一種)、完全なリストをロードしているわけではなく、フラグメントだけです。スクロールするときは、アイテムを最初にレンダリングする必要があります。スクロールすると、このレンダリングの遅れに気付いています。これはVirtualizingStackPanelによって達成されます。利点は、メモリを節約することです。

<ListBox x:Name="YourListbox"> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel /> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
</ListBox> 

を...しかし、解決策は、最初からより多くのリソースを占有します:

カスタムItemsPanelを使用するときは、仮想化を無効にすることができます。長いリストで危険になるかもしれない。

他の方法では、enable virtualization on your ItemsControl、テスト目的でレンダリング遅延(「ブラックホール」)を達成できるはずです。

+0

ありがとうございます!できます!スクロールは少し反応が遅くなったが、それは大丈夫です。悲しいことは、長い初期化時間です。 あなたは知っている、私は実際に1つのことを理解することはできません。レンダリング速度の制御と組み合わせて仮想化を使用できないのはなぜですか?ですから、itemContainerGeneratorが十分高速でなくても、スクロールを少し遅くする必要があります。 もう一度お礼してください! – Grigory

+0

私はお手伝いできると聞いてうれしいです。私はまた、私のアプリの長い初期化の問題に直面しているし、現時点では良い解決策を持っていません。 – thmshd

+1

最初の読み込み時間が長くなるだけでなく、戻るボタンを押して一覧画面に戻ると、レンダリングにも時間がかかるようになります。私のアドバイスはまだ仮想化を有効にしていて、アイテムを1つずつ(カスタマイズ可能な)表示するために、BatchObservableCollection(Shawn Burkeのすばらしいフレームワークhttp://agfx.codeplex.com/で見つけたもの)彼は項目がまだその時点まで降りていないことを知っています。 –

1

どのくらいあなたの文字列がありますか?それはあなたが簡単かつ賢明に非常に短い要約(8〜10文字)に分割することができますか?あなたが問題を解決しようとするLazyListBoxを見てしたい場合がありますので、場合

+0

お返事ありがとうございます!残念ながら、それは役に立たなかった。実際には、LazyListBoxがWP7.1に関連しているかどうかはわかりません。 MSFTは、リストボックスのスクロールを大幅に改善し、一部の3rdパーティコントロールは現在役に立たない。おそらくLazyListBoxもそうです。 – Grigory