2011-07-21 52 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 –