2008-12-11 7 views
5

Hey. J'ai un objet qui a une propriété de chaîne appelée BackgroundColor. Cette chaîne est la représentation hexadécimale d'une couleur. Je ne peux pas changer cet objet.WPF: Liaison d'une couleur d'arrière-plan de listviewitem à une propriété de chaîne hexadécimale d'un objet

Je lie une collection de ces objets à un listView. Ce que je voudrais faire est de lier l'arrière-plan de la ligne listview à la propriété BackgroundColor de l'objet affiché dans la ligne.

Quelle est la meilleure façon de faire cela?

Répondre

2

Je pense que l'utilisation d'un IValueConverter est la solution appropriée. Vous pouvez créer un HexConverter qui convertit la valeur hexadécimale de la chaîne en Couleur. Ce lien devrait vous aider à démarrer.

6

Vous devez utiliser un style pour lier l'arrière-plan de ListViewItem à l'élément de la ligne. L'élément est la valeur par défaut DataContext du ListViewItem ce qui devrait être simple:

<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:sys="clr-namespace:System;assembly=mscorlib" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Grid.Resources> 
     <x:Array x:Key="colors" Type="{x:Type sys:String}"> 
      <sys:String>Red</sys:String> 
      <sys:String>Yellow</sys:String> 
      <sys:String>#0000FF</sys:String> 
     </x:Array> 
    </Grid.Resources> 
    <ListView ItemsSource="{StaticResource colors}"> 
     <ListView.Resources> 
      <Style TargetType="{x:Type ListViewItem}"> 
       <Setter Property="Background" Value="{Binding .}"/> 
      </Style> 
     </ListView.Resources> 
    </ListView> 
</Grid> 

Au lieu de se lier à l'élément tout vous lier à la BackgroundColor, mais il devrait être similaire à ce qui précède. Vous devez utiliser un convertisseur avec la liaison pour préfixer un "#", c'est le signal au BrushConverter intégré pour l'analyser en hexadécimal.

Questions connexes