0

Windows Phone 7 のリストボックスに交互の行スタイルを与えようとしています。

以下を使用しました:行が少ない場合は機能しました。

 <ListBox x:Name="ListBox1" Width="500" Height="300">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Width="500" Background="{Binding age,Converter={StaticResource myconverter}}">
                              <TextBlock Text="Some text"></TextBlock> 
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

そして、これは背景色を変更する私のコンバーターです:

public class MyConverter : IValueConverter
    {
        bool flag = false;
        SolidColorBrush brush1 = new SolidColorBrush(Color.FromArgb(255, 100, 200, 255));
        SolidColorBrush brush2 = new SolidColorBrush(Color.FromArgb(255, 200, 100, 155));
        public object Convert(object value,
                              Type targetType,
                              object parameter,
                              System.Globalization.CultureInfo culture)
        {

            flag = !flag;
            return flag ? brush1 : brush2;

        }

        public object ConvertBack(object value,
                                  Type targetType,
                                  object parameter,
                                  System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

バインド後、リストボックスに別の行の背景色が与えられました。しかし、リストボックスを上下に非常に速くスクロールすると、リストボックスの行が多すぎると、リストボックスのスクロール中にコンバーターが再度呼び出されるため、行の色が変わります。

どうすればこれを修正できますか、助けてください。

4

3 に答える 3

3

コンバーターが呼び出されるアイテムの順序に依存するため、この動作が見られます。仮想化されたリストをスクロールする場合、これが連続しているとは限りません。

アイテムの何かに基づいて色の選択を行う必要があります。

バックグラウンド プロパティをアイテムに直接追加するか、各アイテムのプロパティに基づいて選択することができます。たとえば、リスト内の各項目に順次インデックスがある場合、インデックスが奇数か偶数かに基づいて色を選択するようにコンバーターを変更できます。

于 2012-05-10T12:14:09.470 に答える
0

リストボックスデータテンプレートのスタックパネルの背景をビューモデルのSolidColorBrushオブジェクトにバインドしてみませんか。また、ObservalCollectionのアイテムインデックスが奇数か偶数かに関係なく、データテンプレート自体に色を付けることができます。

于 2012-05-11T14:08:16.610 に答える
0

非常によく似た問題があり、色/不透明度が設定された ListBox に表示されている ViewModel アイテムに新しいプロパティを追加することになりました。リストに何かが追加されるたびに再計算する必要があったため、あまり良くありません。

于 2012-05-10T12:05:57.053 に答える