2011-07-21 50 views
1

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

列表框 项目1:BG绿色 项目2:BG白色 项目3:BG绿色 项目4:BG白色

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

     <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; 
     } 

    } 

感谢一大堆!

回答

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(); 
    } 
} 
+0

这是指ColorConverter而不是ColorFormatter?什么是指数以及指数如何传递给课堂以获得颜色? –

+0

我在网上看到,我们必须添加命名空间和东西,我不知道如何做到这一点?你能帮我澄清一下吗? –

2

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

+0

感谢马特....你回答几乎所有的问题:-D –