2014-07-16 2 views
1

내가 XAML에서리스트 박스를위한 다른 배경 :C#을 목록 상자, 각 항목

<ListBox Name="feedListBox" Height="758" HorizontalAlignment="Center" Margin="0,10,0,0" VerticalAlignment="Top" Width="480" ScrollViewer.VerticalScrollBarVisibility="Auto" SelectionChanged="feedListBox_SelectionChanged" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="1" Background="White"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel VerticalAlignment="Top" Width="480"> 
        <TextBlock FontWeight="Bold" FontSize="24" Name="feedTitle" TextWrapping="Wrap" Margin="12,0,0,0" HorizontalAlignment="Left" Foreground="#FF000000" Text="{Binding Title.Text, Converter={StaticResource RssTextTrimmer}}" /> 
        <TextBlock Name="feedSummary" Foreground="#FF000000" TextWrapping="Wrap" Margin="12,0,0,0" Text="{Binding Summary.Text, Converter={StaticResource RssTextTrimmer}}" /> 
        <TextBlock Name="feedPubDate" Foreground="#FF939393" Margin="12,0,10,10" Text="{Binding PublishDate.DateTime}" HorizontalAlignment="Right" /> 
        <Border BorderThickness="1" Height="2" HorizontalAlignment="Center" VerticalAlignment="Top" Width="480" BorderBrush="Black" /> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

방법은 각 항목에 대한 다른 배경을 지정할 수 있습니다?

+0

당신이이 문제를 해결하기 위해 관리해야? 그렇다면 가장 도움이 된 대답을 대답으로 표시하십시오. – user1859022

답변

2

는 뷰 모델에 Brush 속성을 추가하고 DataTemplate 그것에

뷰 모델의 컨트롤을 바인딩 :

using System.ComponentModel; 
using System.Windows.Media; 
... 
public class YourViewModel : INotifyPropertyChanged{ 
    ... 
    private Brush _backgroundCol = Brushes.Red; //Default color 
    public Brush BackgroundCol 
    { 
     get { return _backgroundCol; } 
     set 
     { 
      _backgroundCol = value; 
      OnPropertyChanged("BackgroundCol"); 
     } 
    } 
    ... 
} 

XAML :

INotifyPropertyChanged을 구현하는 방법에 대한 자세한 내용은
<TextBlock Name="feedPubDate" Background="{Binding Path=BackgroundCol}" /> 

인터페이스를 살펴보십시오. Implementing INotifyPropertyChanged - does a better way exist?

+0

각 항목에 다른 색상을 지정하면 브러시 속성이 get으로 설정되고 – user1

+1

속성을 설정하고 INotifyPropertyChanged를 추가하여보기를 업데이트합니다. – user1

+0

@ user1 좋은 점 - 제안 사항을 반영하도록 코드 샘플을 업데이트했습니다. – user1859022

0

이 시도 :

XAML :

  <ListBox Name="feedListBox" Height="758" HorizontalAlignment="Center" Margin="0,10,0,0" VerticalAlignment="Top" Width="480" ScrollViewer.VerticalScrollBarVisibility="Auto" SelectionChanged="feedListBox_SelectionChanged" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="1" Background="White"> 
       <ListBox.ItemTemplate> 
        <DataTemplate> 
         <StackPanel VerticalAlignment="Top" Width="480"> 
          <Grid Background="{Binding feedTitleBack}"> 
           <TextBlock FontWeight="Bold" FontSize="24" Name="feedTitle" TextWrapping="Wrap" Margin="12,0,0,0" HorizontalAlignment="Left" Foreground="#FF000000" Text="{Binding Title}"/> 
          </Grid> 
          <Grid Background="{Binding feedSummaryBack}"> 
           <TextBlock Name="feedSummary" Foreground="#FF000000" TextWrapping="Wrap" Margin="12,0,0,0" Text="{Binding Summary}" /> 
          </Grid> 
          <Grid Background="{Binding feedPubDateBack}"> 
           <TextBlock Name="feedPubDate" Foreground="#FF939393" Margin="12,0,10,10" Text="{Binding PublishDate}" HorizontalAlignment="Right" /> 
          </Grid> 
          <Border BorderThickness="1" Height="2" HorizontalAlignment="Center" VerticalAlignment="Top" Width="480" BorderBrush="Black" /> 
         </StackPanel> 
        </DataTemplate> 
       </ListBox.ItemTemplate> 
      </ListBox> 

CS :

public class data 
{ 
    public string Title { get; set; } 
    public string feedTitleBack { get; set; } 
    public string Summary { get; set; } 
    public string feedSummaryBack { get; set; } 
    public string PublishDate { get; set; } 
    public string feedPubDateBack { get; set; } 

    public data() { } 
    public data(string Title, string feedTitleBack, string Summary, string feedSummaryBack, string PublishDate, string feedPubDateBack) 
    { 
     this.Title = Title; 
     this.feedTitleBack = feedTitleBack; 
     this.Summary = Summary; 
     this.feedSummaryBack = feedSummaryBack; 
     this.PublishDate = PublishDate; 
     this.feedPubDateBack = feedPubDateBack; 
    } 
} 

    void loadData() 
    { 
     List<data> obj = new List<data>(); 
     obj.Add(new data("Title1", "Red", "Summary1", "Green", "Date", "Blue")); 
     obj.Add(new data("Title1", "#DD4B39", "Summary1", "#006621", "Date", "#1A0DAB")); 
     feedListBox.ItemsSource = obj; 
    } 

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    base.OnNavigatedTo(e); 
    loadData(); 
}