ListBox itemtemplate中的备用RowStyle:Windows Phone

时间:2014-06-23 11:24:58

标签: windows-phone-7 windows-phone-8 listbox windows-phone-8.1

在我们的Windows Phone项目中,我们有一个ListBox ItemTemplate。我们绑定一些数据的地方。在显示数据时,我们希望突出显示每个备用行。如下所示......有人可以帮忙,我怎么能做到这一点。

ROW1

行2

ROW3

ROW4

<ListBox.ItemTemplate>
    <DataTemplate>
       <Grid>
         <StackPanel>
            <TextBlock Text="{Binding}" Foreground="Black" FontSize="32" FontWeight="SemiBold" FontFamily="Calibri" HorizontalAlignment="Stretch"></TextBlock>
            <HyperlinkButton xml:space="preserve" Foreground="Black" FontSize="4"></HyperlinkButton>
         </StackPanel>                             
       </Grid>                            
    </DataTemplate>
</ListBox.ItemTemplate>

我绑定此项数据源的项目列表就像这样

   public static readonly IList<String> Metrics = 
            new ReadOnlyCollection<string>
                          (new List<String> { 
                                                    "ATM not working",
                                                    "Store out of business",
                                                    "ATM not there",
                                                    "Wrong store Address",
                                                    "Wrong store Name",
                                                    "Wrong ATM features Listed"
                                              });

1 个答案:

答案 0 :(得分:0)

一个解决方案(可能不是最好的)可能是在您的Item类中为BackgroundBrush创建一个属性,然后您可以将任何画笔分配给您的背景:

<ListBox.ItemTemplate>
   <DataTemplate>
       <Grid Background={Binding BackBrush}>
         <StackPanel>
           <TextBlock Text="{Binding Text}" Foreground="Black" FontSize="32" FontWeight="SemiBold" FontFamily="Calibri" HorizontalAlignment="Stretch"></TextBlock>
           <HyperlinkButton xml:space="preserve" Foreground="Black" FontSize="4"></HyperlinkButton>
         </StackPanel>
       </Grid>
   </DataTemplate>
</ListBox.ItemTemplate>

然后你的项目类看起来像这样:

public class Item
{
    public string Text { get; set; }
    public SolidColorBrush BackBrush { get; set; }
}

你是一个示例项目:

yourItemSource.Add(new Item { Text = "First", BackBrush = (App.Current as App).Resources["PhoneAccentBrush"] as SolidColorBrush});

由于你有一个ReadOnlyCollection,你可以像这样制作你的ItemsSource:

myList.ItemsSource = Metrics.Select((a, b) => new Item { Text = a, BackBrush = b % 2 == 0 ? (App.Current as App).Resources["PhoneAccentBrush"] as SolidColorBrush : new SolidColorBrush(Windows.UI.Colors.Transparent) }).ToList();

这可能需要一些改进,但应该有效。