0

今日WindowsPhone7で行の背景色を交互に適用する場合、リストボックスに表示する項目のセットが大きい場合、行の色は最終的にドリフトし、2倍になり、レンダリングをスキップするようです。

誰かがこれに問題を抱えていました、これはWindows Phoneのバグですか?私のコードはこれ以上単純化することはできません。私はこの記事を正確にフォローしました:http://chillijam.co.uk/2012/01/11/alternating-listbox-item-background-colours-in-wp7/

うまく始めましょう:

良いスタート

スクロールバーを約6回フリックした後:

ここに画像の説明を入力してください

ご覧のとおり、かなり衝撃的で、悪化し、分離が進んでいます。考え?

4

1 に答える 1

1

Windows Phoneにバグはなく、使用しようとしている安っぽいサードパーティコードにバグはありません。

彼らのアプローチは完全に間違っています。フレームワークがIValueConverter.Convertを順番に呼び出すことを保証する人は誰もいません。ご覧のとおり、フレームワークを上下にスクロールすると、IValueConverter.Convertが任意の順序で呼び出されます。

リストボックスがアイテムを再利用しない場合にのみ機能する可能性があります(リストボックスのItemsPanelプロパティを設定することで再利用を無効にできます。デフォルトでは、VirtualizingStackPanelを使用してアイテムを再利用します。通常のStackPanelに置き換えてください)。ただし、(1)RAMの使用量(2)文書化されていない動作に依存しているため、OSのアップグレードで簡単に破損する可能性があります。

必要なものを実装するための正しい方法はたくさんあります。

たとえば、アイテムクラスに背景色を追加できます。

または、ListBoxから継承し、PrepareContainerForItemOverrideメソッドをオーバーライドし、実装でItemContainerGenerator.IndexFromContainerメソッドを呼び出して行インデックスを取得し、ListBoxItemオブジェクトに必要な色を付けます。2つのことに注意してください(1)base.PrepareContainerForItemOverrideを呼び出すことを忘れないでください。(2)ListBoxItemのプロパティへの変更は、アイテムコンテナテンプレートのビジュアルステートマネージャによって上書きされる場合があります。

于 2013-02-03T13:31:30.500 に答える