2011-08-07 2 views
1

Je commence par WP7 et j'essaie de changer la couleur et les autres propriétés de TexBlock. Il est inclus dans Listbox et lié à une collection. Je cherche un moyen comme 'OnDataBound'. La valeur doit changer dépend de l'objet bind.Changement de couleur de Listbox sur WP7

<ListBox HorizontalAlignment="Left" Name="listBox1" ItemsSource="{Binding}" > 
       <ListBox.ItemTemplate> 
        <DataTemplate> 
         <Border BorderBrush="{StaticResource PhoneForegroundBrush}" Width="418" BorderThickness="1" Margin="2"> 
          <StackPanel Orientation="Vertical" > 
           <StackPanel Orientation="Horizontal"><TextBlock Text="Charater: "/><TextBlock Text="{Binding Path=CharacterName}" TextWrapping="Wrap" /></StackPanel> 
           <StackPanel Orientation="Horizontal"><TextBlock Text="Perk launched: "/><TextBlock Text="{Binding Path=CreationDate}" TextWrapping="Wrap"/></StackPanel> 
           <StackPanel Orientation="Horizontal"><TextBlock Text="Finished at: "/><TextBlock Text="{Binding Path=FinishedAt}" TextWrapping="Wrap"/></StackPanel> 
           <StackPanel Orientation="Horizontal"><TextBlock x:Name="TextBlockStatus" Text="Status: "/><TextBlock Text="{Binding Path=Status}" TextWrapping="Wrap"/></StackPanel> 
          </StackPanel> 
         </Border> 
        </DataTemplate> 
       </ListBox.ItemTemplate> 
      </ListBox> 

Depend de statut d'objet de liaison, je dois changer propery de Textblock (couleur, etc.) pourriez-vous s'il vous plaît me dire le point indiquant?

Ma liaison est ce follwing (en .cs):

this.listBox1.DataContext = this.calculatedValues; 

Merci pour votre aide

+0

À ce moment, j'utilise un convertisseur (hérite de IValueConverter) et renvoie un SolidColorBrush, que je lie sur la propriété Forecolor d'un TextBlock. Est-ce le meilleur moyen? – Xstahef

Répondre

1

Dans cet exemple, la couleur si elle est stockée dans une classe appelée ListItems qui est défini comme:

public class ListItems 
{ 
    public string name { get; set; } 
    public string color { get; set; } 
} 

Une colletion observable de type ListItems est ajoutée au code derrière le fichier MainPage:

public partial class MainPage : PhoneApplicationPage 
{ 

    ObservableCollection<ListItems> items = new ObservableCollection<ListItems>(); 
    // Constructor 
    public MainPage() 
    { 
     InitializeComponent(); 

     items.Add(new ListItems() { name = "Item 1", color = "Red" }); 
     items.Add(new ListItems() { name = "Item 2", color = "Blue" }); 
     items.Add(new ListItems() { name = "Item 3", color = "Green" }); 
     items.Add(new ListItems() { name = "Item 4", color = "White" }); 
     items.Add(new ListItems() { name = "Item 5", color = "Purple" }); 

     DataContext = this; 
     listBox1.ItemsSource = items; 
    } 
} 

}

et articles de type ListItem sont ajoutés à la collection observable.

Le fichier MainPage.xaml est alors conçu pour contenir une zone de liste qui a son ItemTemplate lié aux propriétés de la classe ListItem:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
     <ListBox HorizontalAlignment="Left" Margin="12" Width="400" Height="400" Name="listBox1" VerticalAlignment="Top" > 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <TextBlock x:Name="Item" Text="{Binding name}" FontFamily="Arial" FontSize="40" Foreground="{Binding color}" /> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 
    </Grid> 

La page fini ressemble à ceci:

enter image description here

Espérons que cela aide.

+0

Merci. C'est une bonne solution, mais je ne peux pas changer l'entité liée. Mais j'aime cette méthode et je l'utiliserai comme possible. – Xstahef