在wp7中自定义列表框

时间:2011-07-21 09:26:28

标签: windows-phone-7 listboxitem

这可能很容易,但我不知道从哪里开始。我解析xml值并将它们绑定到listbox;为了更好的界面,我希望我的项目显示不同的背景颜色。 Item1的背景颜色为绿色,Item2的背景颜色为白色,item3的bg为绿色,item4为白色等。

列表框    第1项:bg绿色    第2项:bg白色    第3项:bg绿色    Item4:bg white

我应该采取什么方法来实现这一目标? 我的代码如下:

                        <ListBox Name="listbox1" Height="502" Width="448">
                        <ListBox.ItemTemplate>
                            <DataTemplate>

                                    <StackPanel Orientation="Horizontal" Margin="15,10,25,10" OpacityMask="#FF33A82D" Background="#FFBEFFBE" Width="480">
                                        <Image x:Name="imageAV" Source="Images/album_art_default_small.png" Height="100" Width="100" 
                               Stretch="UniformToFill" Margin="0,0,15,0" />
                                        <StackPanel Orientation="Vertical" VerticalAlignment="Center">
                                            <TextBlock Text="{Binding track}" FontWeight="Bold" Width="Auto" Margin="0,0,0,5" Foreground="Black" />

                                                <TextBlock Text="{Binding artist}"  Width="Auto" Foreground="Black"/>

                                                <TextBlock Text="{Binding album}"  Width="Auto" Foreground="Black"/>
                                        <StackPanel.Background>
                                            <SolidColorBrush />
                                        </StackPanel.Background>
                                    </StackPanel>
                                    </StackPanel>                                  

                            </DataTemplate>
                        </ListBox.ItemTemplate>

                    </ListBox>

代码:

    void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
    {
        using (var reader = new StreamReader(e.Result))
        {
            int[] counter = { 1 };
            string s = reader.ReadToEnd();
            Stream str = e.Result;
            str.Position = 0;
            XDocument xdoc = XDocument.Load(str);

            var data = from query in xdoc.Descendants("rank")
                       select new ranking
                       {
                           index = counter[0]++,
                       //    avlink = (string)query.Element("album_gdo").Element("avlink"),
                           album = (string)query.Element("album"),
                           track = (string)query.Element("track"),
                           artist = (string)query.Element("artist"),
                       };          
         //   lb1.ItemsSource = data;   
            listbox1.ItemsSource = data;
        }

    }

非常感谢!

2 个答案:

答案 0 :(得分:2)

假设你绑定的对象中有一个属性可以指示这个属性,你应该将该属性绑定到项目的背景(在模板中)并使用转换器将其转换为适当的画笔。 / p>

答案 1 :(得分:1)

以下是一些链接,其中包含有关如何使用数据绑定和转换器的信息。您将需要使用IValueConverter来数据绑定到项目的“索引”属性。

Data binding in Silverlight Data binding and value converters

以下是概述

的概述
<StackPanel Background="{Binding index, Converter={StaticResource ColorConverter}}">

你的ColorFormatter看起来像这样:

public class ColorFormatter : IValueConverter
{
    string[] colorArr = {"Red","Blue","Green","Yellow"};
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return (colorArr[(int)value % 4]);
    }
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}