这可能很容易,但我不知道从哪里开始。我解析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;
}
}
非常感谢!
答案 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();
}
}