настроить список в wp7 - PullRequest
1 голос
/ 21 июля 2011

Это может быть легко, но я понятия не имею, с чего начать.Я анализирую значение XML и привязываю их к списку;для лучшего интерфейса я хочу, чтобы мой элемент отображался в разных цветах фона.Item1 имеет фоновый цвет зеленый, Item2 имеет цвет фона белый, item3 имеет bg зеленый, item4 белый и т. Д.

Какой подход я должен использовать для достижения этой цели?Мой код, как показано ниже:

                        <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 ]

2 голосов
/ 21 июля 2011

Предполагая, что в объекте, к которому вы привязываете свойство, может указывать это, вы должны привязать это свойство к фону элемента (в шаблоне) и использовать конвертер, чтобы превратить его в соответствующую кисть.

1 голос
/ 22 июля 2011

Вот пара ссылок с информацией о том, как использовать привязку данных и конвертеры. Вам нужно будет использовать IValueConverter для привязки данных к «индексируемому» свойству ваших предметов.

Привязка данных в Silverlight Привязка данных и преобразователи значений

Вот схема того, как это может выглядеть

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